Почему эти две команды возвращают разные результаты?
lsmod | wc -l
100
ls /sys/module | wc -l
138
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 встроен.
/sys/module/MODULENAME
MODULENAME
это имя модуля в ядре. Это имя модуля всегда будет отображаться, если модуль загружен как динамический. Это именно то, что вы можете увидеть, выполнив lsmod
команда или когда вы проверяете /proc/modules
файл.
Если он встроен непосредственно в ядро, он будет отображаться только в том случае, если у него есть версия или хотя бы один параметр. После этого доступные параметры доступны в каталоге:
/sys/module/MODULENAME/parameters