Linux系统中,查看所有模块(尤其是内核模块)可以通过多种命令实现,以下是详细的操作方法和工具说明:
基础命令
-
lsmod
- 功能:列出当前已加载的内核模块,包括模块名称、大小、使用次数及依赖关系,这是最常用的快速查看方式。
- 用法示例:直接输入
lsmod
即可显示全表;若需过滤特定关键词(如搜索含“usb”的模块),可结合管道符与grep
:lsmod | grep usb
。 - 扩展选项:支持排序或格式化输出,
lsmod -e
以字节为单位显示大小,lsmod -r
按模块名反向排序。
-
modinfo <模块名>
- 功能:获取单个模块的详细信息,如作者、描述、版本、许可证等元数据,适用于深入分析特定模块的属性。
- 用法示例:
modinfo e1000
会返回该网卡驱动的完整信息,包括路径(通常位于/lib/modules/$(uname -r)/kernel/...
)。
-
读取
/proc/modules
文件- 原理:此虚拟文件由系统动态生成,实时反映已加载模块的状态,内容与
lsmod
类似,但可通过文本编辑器进一步处理。 - 用法示例:
cat /proc/modules
或重定向到其他工具进行分析,如grep
过滤。
- 原理:此虚拟文件由系统动态生成,实时反映已加载模块的状态,内容与
高级搜索技巧
-
基于路径的查找
- 目标目录结构:所有编译好的模块以
.ko
后缀存储在/lib/modules/$(uname -r)/
下,$(uname -r)
代表当前运行的内核版本。 - 命令实践:使用
find
递归遍历子目录查找符合条件的文件:find /lib/modules/$(uname -r) -name ".ko"
;或者用locate
加速全系统检索(需先执行updatedb
更新数据库):locate my_driver.ko
。
- 目标目录结构:所有编译好的模块以
-
正则匹配与模糊查询
- 场景适配:当不确定完整模块名时,可通过通配符或正则表达式缩小范围,查找所有无线相关驱动:
lsmod | grep -E 'wlan|wifi'
。
- 场景适配:当不确定完整模块名时,可通过通配符或正则表达式缩小范围,查找所有无线相关驱动:
-
内置模块特殊处理
- 区别说明:部分模块直接编译进内核而非独立加载,
modinfo
会失效,需通过/sys/module
体系访问参数:ls /sys/module/tcp_cubic/parameters
列出可调优参数,再用cat
读取具体值如tcp_friendliness
。
- 区别说明:部分模块直接编译进内核而非独立加载,
-
设备关联性分析
- 交叉验证方法:结合
lspci -k
命令查看 PCI 设备的绑定情况,输出中会标注对应的内核模块名称,帮助定位硬件驱动依赖关系。
- 交叉验证方法:结合
以下为常用命令对比表格:
| 命令 | 主要用途 | 特点 | 适用场景 |
|——————–|——————————|——————————|————————–|
| lsmod
| 列出已加载模块概览 | 简洁高效,支持过滤 | 快速浏览整体状态 |
| modinfo
| 单模块详细情报 | 提供开发者级元数据 | 调试特定驱动问题 |
| /proc/modules
| 系统级快照 | 程序化读取方便 | 脚本监控或日志记录 |
| find/locate
| 磁盘物理位置搜索 | 精准定位 .ko
文件路径 | 手动修改或备份恢复 |
| lspci -k
| 设备与驱动映射关系 | 直观展示硬件拓扑 | 排除外设兼容性故障 |
FAQs
-
问:为什么某些模块无法通过
modinfo
查询?
答:可能是因为该模块属于内置类型(直接编译进内核),而非动态加载的外部模块,此时应访问/sys/module/<模块名>/parameters
获取配置参数。 -
问:如何确认某个模块是否正在被使用?
答:观察lsmod
输出中的 “Used by” 列数值大于零即表示有进程依赖该模块;也可使用rmmod --dry-run <模块名>
测试能否安全卸载而不中断服务。
通过上述方法组合使用,可以全面掌握Linux系统中内核模块的加载状态、功能特性及关联关系,满足从日常管理到故障
原创文章,发布者:酷盾叔,转转请注明出处:https://www.kd.cn/ask/78001.html