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


10

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

lsmod | wc -l
100

ls /sys/module | wc -l
138

Answers:


13

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


@MikeB,当您看到CONFIG_X_X = yes时,我认为这意味着代码不是作为动态模块在内核中构建的:示例grep EXT4 /boot/config-3.6.11-4.fc16.i686 CONFIG_EXT4_FS = y modinfo ext4错误:模块ext4找不到ls -l / sys / module / ext4 ls:无法访问/ sys / module / ext4:没有这样的文件或目录
c4f4t0r 2013年

是的,看起来内置模块需要具有参数才能使其可见。
MikeyB

5
  • /sys/module/MODULENAME

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

如果直接内置在内核中,则只有在具有版本或至少一个参数的情况下才会显示。然后,可用参数在目录中可用:

  • /sys/module/MODULENAME/parameters
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.