为什么“lsmod | wc -l”不等于“ls /sys/module | wc -l”

为什么“lsmod | wc -l”不等于“ls /sys/module | wc -l”

为什么这两个命令返回不同的结果?

lsmod | wc -l
100

ls /sys/module | wc -l
138

答案1

lsmod列出你的所有动态的已加载的模块。

中的条目/sys/module对应于动态模块内置于内核的模块(具有需要访问的参数)而不是动态加载的模块。例如:

[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 模块配置为动态模块。对比:

[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 是内置的。

答案2

  • /sys/module/MODULENAME

MODULENAME是内核中的模块名称。如果模块作为动态模块加载,则此模块名称将始终显示。这正是您在发出lsmod命令或检查/proc/modules文件时可以看到的内容。

如果直接内置于内核中,则只有当其具有版本或至少一个参数时才会显示。然后,可用参数可在目录中找到:

  • /sys/module/MODULENAME/parameters

相关内容