1、概述在Linux世界中内核模块就像是系统的“即插即用”组件它们允许内核在运行时动态扩展功能而无需重新启动计算机。无论是硬盘驱动、网络协议还是显卡驱动都常常以模块形式存在。那么如何查看当前有哪些模块正在运行呢答案就是使用 lsmod​ 命令。2、什么是lsmod简单来说lsmod是一个用于快速列出当前已加载到Linux内核中的所有模块的简单工具。它就像是系统的“模块任务管理器”能让你一目了然地看到所有活跃的内核模块。它的语法非常直接直接在终端输入命令即可不需要任何参数代码语言JavaScript自动换行AI代码解释lsmod3、解读lsmod的输出执行命令后你会看到一个类似这样的表格展开代码语言JavaScript自动换行AI代码解释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_conntrackSize大小第二列显示该模块所占用的内存大小单位是字节BytesUsed by被…使用这是最关键的一列它说明了模块的依赖和使用情况。如果显示为 0表示该模块当前没有被任何其他模块使用如果显示为数字表示该模块被多少个其他模块依赖如果显示为模块名称列表则具体指出了是哪些模块在依赖它。例如上表中的 nf_conntrack 模块被 nf_nat,nf_nat_ipv4等6个模块使用。4、实用技巧示例lsmod本身很简单但结合其他命令能发挥更大作用4.1 查找特定模块你可以使用grep命令来快速过滤结果检查某个模块比如nf_conntrack连接追踪是否已加载代码语言JavaScript自动换行AI代码解释lsmod | grep -i nf_conntrack4.2 获取模块的详细信息lsmod只提供基本信息。如果你想了解某个模块的详细描述、版本、作者等需要使用modinfo命令。展开代码语言JavaScript自动换行AI代码解释# 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:uint5、相关命令简介lsmod是内核模块管理工具链中的一员。了解它与其它命令的关系有助于更好地进行系统管理。命令功能与 lsmod的关系modprobe​智能加载/卸载模块能自动处理依赖关系。使用sudo modprobe 模块名加载新模块后可用lsmod验证是否成功。insmod​低级模块加载器需要指定模块文件的完整路径不处理依赖。更推荐使用modprobe。rmmod​卸载模块但需确保模块未被使用。卸载前用lsmod检查 Used by 列卸载后用lsmod确认。5.1 临时性加载modprobe和 insmod命令的作用是动态地将模块的代码和数据加载到当前正在运行的 Linux 内核的内存空间中。这个过程只影响本次开机后的系统状态。当服务器关闭或重启时内存中的所有数据包括已加载的模块都会被清除。下次启动时内核会以一个“干净”的状态开始只会加载其内置的驱动和明确配置为启动时加载的模块。可以将内核内存想象成一块白板modprobe和 insmod是在上面写字而重启就像是把白板擦干净。5.2 持久化加载如果某个内核模块需要每次开机都自动加载您必须进行持久化配置。具体方法因 Linux 发行版而异下面以 CentOS / RHEL / Fedora 系统为例在 /etc/modules-load.d/目录下创建一个新的 .conf配置文件。展开代码语言JavaScript自动换行AI代码解释# 创建一个新的配置文件比如叫 mymodules.conf sudo nano /etc/modules-load.d/mymodules.conf # 在文件中添加模块名 nf_conntrack # 保存并退出如果模块加载时需要传递参数例如 nf_conntrack模块可能需要设置 nf_conntrack_max则需要将配置写在 /etc/modprobe.d/目录下的文件中。展开代码语言JavaScript自动换行AI代码解释# 编辑或创建一个modprobe配置文 件 sudo nano /etc/modprobe.d/my-module-options.conf # 使用 options 关键字指定参数 options nf_conntrack nf_conntrack_max1000000注意修改永久加载配置后通常不需要立即重启服务器新的配置会在下次系统启动时自动生效。如果您希望配置立即生效也可以手动加载模块而无需重启。6、总结总的来说lsmod是一个简单而强大的基础命令是系统管理员和开发者排查硬件驱动问题、了解系统内核组件运行状态的首选工具。无论你是要确认驱动是否正常加载还是检查模块间的依赖关系lsmod通常都是高效的第一步。