ทำไมทั้งสองคำสั่งจึงให้ผลลัพธ์ที่ต่างกัน?
lsmod | wc -l
100
ls /sys/module | wc -l
138
ทำไมทั้งสองคำสั่งจึงให้ผลลัพธ์ที่ต่างกัน?
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