lsmod是首选命令,因其直接读取/proc/modules、输出稳定、无依赖、秒级响应,且仅反映当前真实运行的内核模块状态。

直接用 lsmod 就能看到当前所有已加载的内核模块,不需要额外安装或配置。
为什么 lsmod 是首选命令
lsmod 本质是读取 /proc/modules 的易读封装,输出稳定、无依赖、秒级响应。它不依赖 systemd 或任何服务状态,只要内核在跑,它就准。
- 输出每行包含模块名、内存占用(字节)、被引用次数、依赖关系(如
nvidia_modeset→nvidia_drm) - 模块名不含路径或扩展名(
nvidia而不是nvidia.ko),方便后续配合modinfo查细节 - 若终端显示乱码或列宽异常,加
lsmod | column -t对齐更清晰
查特定模块时别漏掉大小写和下划线
模块名严格区分大小写和符号,比如 nvidia_uvm 和 nvidia-uvm 是两个不同模块(后者根本不存在)。常见误操作:
Ubuntu 26.04 LTS(代号“Resolute Raccoon”)是Canonical于2026年4月23日发布的下一代长期支持版操作系统,提供长达10年的技术支持。它搭载Linux 7.0内核与GNOME 50桌面环境,全面转向Wayland协议,并引入Rust重写的核心工具以增强安全性。官方提供适用于AMD64和ARM64架构的桌面及服务器ISO镜像,是追求前沿技术与极致稳定的开发者
- 执行
lsmod | grep nvidia时漏掉下划线,实际模块名是nvidia_uvm、nvidia_drm,不是nvidiauvm - 查
nvme模块却输成nvme_core—— 正确名就是nvme,nvme_core是旧内核命名,5.15+ 已统一为nvme - 用
grep -i看似省事,但会混入无关日志字符串(如 dmesg 缓存残留),建议坚持小写精确匹配
modinfo 查不到模块?先确认它是否真已加载
modinfo nvidia 报错 ERROR: Module nvidia not found in directory /lib/modules/5.15.0-86-generic,不一定是驱动没装,很可能是模块根本没被加载。
- 先运行
lsmod | grep nvidia,如果无输出,说明该模块当前未载入(可能被 blacklist、未触发硬件事件、或由用户空间服务按需加载) -
modinfo只查磁盘上存在的模块文件,不管它是否在内存中;而lsmod只反映“此刻正在运行”的模块 - 想强制加载试试?
sudo modprobe nvidia,失败则看dmesg | tail -20最后几行报什么错(常见如签名验证失败、依赖缺失)
脚本里解析 lsmod 输出要小心空格和制表符
直接用 awk '{print $1}' 提取模块名在多数情况下可行,但某些模块名含空格(极少见)或字段对齐靠制表符,会导致截断。更健壮的做法是:
- 用
lsmod | awk -F' ' '{print $1}'显式指定空格分隔(注意:多个连续空格会被当一个分隔符) - 或直接读原始源:
cat /proc/modules | cut -d' ' -f1,因为该文件每行首字段必为模块名,且以单空格分隔 - 避免用
lsmod | head -n 10 | ...做逻辑判断——模块加载顺序不固定,不能假设前 N 行含关键模块
真正容易被忽略的是:模块是否“在运行”和“是否存在”是两件事,lsmod 只回答前者;而很多故障(比如显卡黑屏、USB 设备失联)恰恰发生在模块已加载但功能异常时,这时候得结合 dmesg | grep -i error 和 journalctl -k 往上翻日志,而不是反复查 lsmod。

















