为什么这两个命令返回不同的结果?
lsmod | wc -l 100 ls /sys/module | wc -l 138
lsmod列出所有加载的dynamic模块。
/sys/module的条目对应于内置到内核中的dynamic模块和模块(并且具有需要可访问的参数)而不是dynamic加载。 例如:
[michael@brazzers:~]$ ls -d /sys/module/ip_tables/ /sys/module/ip_tables/ [michael@brazzers:~]$ lsmod |grep ^ip_tables ip_tables 26995 3 iptable_filter,iptable_mangle,iptable_nat [michael@brazzers:~]$ grep CONFIG_NF_NAT_IPV4 /boot/config-3.8.0-30-generic CONFIG_NF_NAT_IPV4=m
你可以在这里看到iptables模块被configuration成一个dynamic模块。 对比:
[michael@brazzers:~]$ ls -d /sys/module/apparmor/ /sys/module/apparmor/ [michael@brazzers:~]$ lsmod |grep ^apparmor [michael@brazzers:~]$ grep APPARMOR /boot/config-3.8.0-30-generic CONFIG_SECURITY_APPARMOR=y
而apparmor是内置的。
/sys/module/MODULENAME MODULENAME是内核中模块的名称。 如果模块作为dynamic模块加载,则此模块名称将始终显示。 这正是您发出lsmod命令或检查/proc/modules文件时可以看到的内容。
如果直接构build到内核中,它将只会显示,如果它有一个版本或至less有一个参数。 可用的参数在目录中可用:
/sys/module/MODULENAME/parameters