ubuntu如何查看一个内核模块被什么模块依赖(内核模块信息常用命令)?

在 Ubuntu 中,可以通过以下方法查看一个内核模块被哪些其他模块依赖:


方法 1:使用 modinfo 和 lsmod 结合

  1. 查看模块的依赖关系:

    bash 复制代码
    modinfo <模块名> | grep depends
    • 示例:查看 kvm_intel 的依赖

      bash 复制代码
      modinfo kvm_intel | grep depends
    • 输出示例:

      复制代码
      depends:        kvm, intel_iommu
    • 这表示 kvm_intel 依赖 kvm 和 intel_iommu 模块。

  2. 反向检查依赖它的模块(需手动分析):

    • 使用 lsmod 列出所有已加载模块,并检查哪些模块的 used by 字段包含目标模块:

      bash 复制代码
      lsmod | grep <模块名>
    • 例如,检查哪些模块依赖 kvm:

      bash 复制代码
      lsmod | grep kvm
      • 输出示例:

        复制代码
        kvm_intel             319488  0
        kvm                   987136  1 kvm_intel
      • 这里 kvm_intel 依赖 kvm(kvm_intel 的 1 表示被 1 个模块依赖,即 kvm)。


方法 2:使用 modprobe --show-depends

  • 查看加载模块时需要的所有依赖项(包括间接依赖):

    bash 复制代码
    modprobe --show-depends <模块名>
    • 示例:

      bash 复制代码
      modprobe --show-depends kvm_intel
    • 输出示例:

      复制代码
      install /bin/true
      /lib/modules/6.2.0-26-generic/kernel/arch/x86/kvm/kvm.ko
      /lib/modules/6.2.0-26-generic/kernel/drivers/iommu/intel-iommu.ko
      /lib/modules/6.2.0-26-generic/kernel/arch/x86/kvm/kvm-intel.ko
    • 这表示 kvm_intel 依赖 kvm 和 intel-iommu。


方法 3:使用 depmod 生成依赖关系图(高级)

  1. 生成模块依赖文件:

    bash 复制代码
    sudo depmod -a
    • 这会生成 /lib/modules/$(uname -r)/modules.dep 文件,记录所有模块的依赖关系。
  2. 查询特定模块的依赖:

    bash 复制代码
    grep "^<模块名>:" /lib/modules/$(uname -r)/modules.dep
    • 示例:

      bash 复制代码
      grep "^kvm_intel:" /lib/modules/$(uname -r)/modules.dep
    • 输出示例:

      复制代码
      kernel/arch/x86/kvm/kvm-intel.ko: kernel/arch/x86/kvm/kvm.ko kernel/drivers/iommu/intel-iommu.ko

方法 4:使用 lsmod + 脚本分析(反向依赖)

如果需要找出哪些模块依赖目标模块(即反向依赖),可以编写一个简单脚本:

bash 复制代码
#!/bin/bash
target_module="$1"
lsmod | awk 'NR>1 {print $1}' | while read mod; do
    deps=$(modinfo "$mod" | grep depends | cut -d: -f2 | tr -d ' ,')
    if [[ "$deps" == *"$target_module"* ]]; then
        echo "$mod 依赖 $target_module"
    fi
done
  • 使用方法 :

    bash 复制代码
    chmod +x find_dependents.sh
    ./find_dependents.sh kvm
  • 输出示例 :

    复制代码
    kvm_intel 依赖 kvm

总结

需求 推荐命令
查看模块的直接依赖 `modinfo <模块名>
查看加载模块时的完整依赖链 modprobe --show-depends <模块名>
生成所有模块的依赖关系文件 sudo depmod -a
反向查找依赖目标模块的其他模块 自定义脚本(如上)

实际应用示例

假设你想确认 kvm_intel 是否被其他模块依赖:

  1. 直接依赖:

    bash 复制代码
    modinfo kvm_intel | grep depends
    • 输出:depends: kvm, intel_iommu
  2. 反向依赖(使用脚本):

    bash 复制代码
    ./find_dependents.sh kvm_intel
    • 输出:无(因为 kvm_intel 通常是叶子模块,不被其他模块依赖)。
  3. 验证 kvm 的依赖者:

    bash 复制代码
    ./find_dependents.sh kvm
    • 输出:kvm_intel 依赖 kvm

通过以上方法,你可以清晰掌握模块间的依赖关系,避免强制卸载导致系统崩溃。

相关推荐
重生之高冷汉堡包8 分钟前
家庭住宅IP是什么?机房住宅与普通住宅有什么区别
运维·服务器·网络·网络协议·tcp/ip·用户运营
Thneonl9 分钟前
git reset --hard 之后先别哭:reflog 里存着你刚弄丢的那个分支
运维·后端
见闻小天地14 分钟前
液冷直流负载:AI 算力中心带载测试的关键设备
运维·业界资讯
迪康软件zz19 分钟前
从 PHP 高危漏洞看纵深防御:资产盘点、补丁管理与端点防护实践
运维·安全·自动化运维
祥Sir的SRE笔记23 分钟前
CPU 100% 不一定是故障:压测打满、业务饱和、突变打满的判断与排查
linux·面试·性能优化·dba·sre·故障定位·性能排查
智能运维指南29 分钟前
2026 年可观测平台选型对比:混合 IT 架构下企业运维监控产品怎么选
运维·可观测·嘉为蓝鲸·运维监控产品对比
Fnetlink131 分钟前
Fnet 云网安 261023
运维·开发语言·网络·人工智能·安全·web安全·php
可爱系程序猿35 分钟前
nvcuvid.dll 加载失败定位:CUDA 视频解码、驱动接口与进程位数逐项核查
运维·服务器·程序人生·电脑·音视频
郝亚军36 分钟前
在win11上用openssl生成私钥、再从私钥导出公钥、...
linux·运维·服务器
智能运维指南43 分钟前
企业 IT 管理软件如何选型?先理清监控、服务管理、配置与自动化能力
运维·自动化·自动化运维·嘉为蓝鲸