1、概述
在Linux世界中,内核模块就像是系统的"即插即用"组件,它们允许内核在运行时动态扩展功能,而无需重新启动计算机。无论是硬盘驱动、网络协议还是显卡驱动,都常常以模块形式存在。那么,如何查看当前有哪些模块正在运行呢?答案就是使用 lsmod 命令。
2、什么是lsmod?
简单来说,lsmod是一个用于快速列出当前已加载到Linux内核中的所有模块的简单工具。它就像是系统的"模块任务管理器",能让你一目了然地看到所有活跃的内核模块。
它的语法非常直接,直接在终端输入命令即可,不需要任何参数:
lsmod
3、解读lsmod的输出
执行命令后,你会看到一个类似这样的表格:
Module Size Used by
veth 13458 0
xt_nat 12681 25
xt_conntrack 12760 3
ipt_MASQUERADE 12678 16
nf_nat_masquerade_ipv4 13463 1 ipt_MASQUERADE
nf_conntrack_netlink 36396 0
nfnetlink 14519 2 nf_conntrack_netlink
iptable_nat 12875 4
nf_conntrack_ipv4 15053 4
nf_defrag_ipv4 12729 1 nf_conntrack_ipv4
nf_nat_ipv4 14115 1 iptable_nat
nf_nat 26583 3 nf_nat_ipv4,xt_nat,nf_nat_masquerade_ipv4
nf_conntrack 139264 6 nf_nat,nf_nat_ipv4,xt_conntrack,nf_nat_masquerade_ipv4,nf_conntrack_netlink,nf_conntrack_ipv4
xt_addrtype 12676 2
iptable_filter 12810 1
.......
我们来分解一下各列的含义:
- Module(模块名):第一列显示已加载模块的名称,例如 nf_conntrack;
- Size(大小):第二列显示该模块所占用的内存大小,单位是字节(Bytes);
- Used by(被...使用):这是最关键的一列,它说明了模块的依赖和使用情况。
- 如果显示为 0,表示该模块当前没有被任何其他模块使用;
- 如果显示为数字,表示该模块被多少个其他模块依赖;
- 如果显示为模块名称列表,则具体指出了是哪些模块在依赖它。例如,上表中的 nf_conntrack 模块被 nf_nat,nf_nat_ipv4等6个模块使用。
4、实用技巧示例
lsmod本身很简单,但结合其他命令能发挥更大作用:
4.1 查找特定模块你可以使用grep命令来快速过滤结果,检查某个模块(比如nf_conntrack连接追踪)是否已加载
lsmod | grep -i nf_conntrack
4.2 获取模块的详细信息
lsmod只提供基本信息。如果你想了解某个模块的详细描述、版本、作者等,需要使用modinfo命令。
# modinfo nf_conntrack
filename: /lib/modules/3.10.0-1160.el7.x86_64/kernel/net/netfilter/nf_conntrack.ko.xz
license: GPL
retpoline: Y
rhelversion: 7.9
srcversion: 8B9F3AAA206BFFB785D7D0C
depends: libcrc32c
intree: Y
vermagic: 3.10.0-1160.el7.x86_64 SMP mod_unload modversions
signer: CentOS Linux kernel signing key
sig_key: E1:FD:B0:E2:A7:E8:61:A1:D1:CA:80:A2:3D:CF:0D:BA:3A:A4:AD:F5
sig_hashalgo: sha256
parm: tstamp:Enable connection tracking flow timestamping. (bool)
parm: acct:Enable connection tracking flow accounting. (bool)
parm: nf_conntrack_helper:Enable automatic conntrack helper assignment (default 1) (bool)
parm: expect_hashsize:uint
5、相关命令简介
lsmod是内核模块管理工具链中的一员。了解它与其它命令的关系有助于更好地进行系统管理。
| 命令 | 功能 | 与 lsmod的关系 |
|---|---|---|
modprobe |
智能加载/卸载模块,能自动处理依赖关系。 | 使用 sudo modprobe <模块名>加载新模块后,可用 lsmod验证是否成功。 |
insmod |
低级模块加载器,需要指定模块文件的完整路径,不处理依赖。 | 更推荐使用 modprobe。 |
rmmod |
卸载模块,但需确保模块未被使用。 | 卸载前用 lsmod检查 "Used by" 列;卸载后用 lsmod确认。 |
6、总结
总的来说,lsmod是一个简单而强大的基础命令,是系统管理员和开发者排查硬件驱动问题、了解系统内核组件运行状态的首选工具。无论你是要确认驱动是否正常加载,还是检查模块间的依赖关系,lsmod通常都是高效的第一步。