lsmod 的 used by 列反映模块被谁使用,即反向依赖关系;modinfo 的 depends 行显示正向依赖;modules.dep 文件提供完整底层依赖图。

lsmod 本身不直接显示模块的“依赖谁”,而是通过 Used by 列反映“被谁使用”——这其实是依赖关系的反向体现。要理清模块 A 是否依赖模块 B,关键看 B 是否出现在 A 的 Used by 列中(即 B 被 A 使用),或更准确地说:如果模块 X 出现在模块 Y 的 Used by 列里,说明 Y 依赖 X。
看懂 Used by 列的含义
这一列有三种常见形式:
- 数字(如 3):表示该模块正被 3 个其他模块或内核子系统使用;
- 模块名列表(如 nf_nat,xt_nat):明确列出哪些模块在使用它,即这些模块都依赖当前行的模块;
- 0:表示当前没有其他模块或进程在使用它,通常意味着它可能是独立功能模块,或已加载但未激活依赖链。
结合 modinfo 查看正向依赖
lsmod 显示的是“谁用了我”,而有时你想知道“这个模块自己依赖哪些模块”。这时要用:
modinfo 模块名
例如:
modinfo nf_conntrack
输出中会包含 depends: 行,直接列出它所依赖的其他模块(如 depends: nf_defrag_ipv4,nf_conntrack_generic,nf_conntrack_proto_tcp)。这是真正的正向依赖关系。
用 grep 快速定位依赖路径
想确认某个基础模块(比如 nf_defrag_ipv4)是否被上层模块拉起,可以:
- 先查它是否已加载:
lsmod | grep nf_defrag_ipv4; - 再查哪些模块在用它:
lsmod | grep "nf_defrag_ipv4"—— 注意这一行很可能出现在其他模块的 Used by 列里; - 若发现
nf_conntrack_ipv4的 Used by 包含nf_defrag_ipv4,就说明前者依赖后者。
查看 modules.dep 文件获取完整依赖图
系统级依赖关系记录在:
/lib/modules/$(uname -r)/modules.dep
这个文件由 depmod 生成,每行格式为:
模块.ko: 依赖1.ko 依赖2.ko
例如:
kernel/net/ipv4/nf_nat.ko: kernel/net/netfilter/nf_conntrack.ko kernel/net/ipv4/nf_defrag_ipv4.ko
这比 lsmod 更完整、更底层,适合脚本分析或排查加载失败原因。











