首页/系统/信创系统运维速查/dnf provides 按文件/能力找包
命令与包管理65 条

dnf provides 按文件/能力找包

系统报缺某个命令或 .so 文件、不知道装哪个包:dnf provides 按路径或能力反查包名;已装文件反查用 rpm -qf。

信创系统运维速查系统更新于 2026-10-13

provides 解决什么问题

系统报缺某个命令或某个共享库,却不知道该装哪个包时,用 dnf provides 按文件路径或提供能力反查包名。它查询的是仓库元数据,已安装文件的反查则用 rpm -qf。这是 RPM 系发行版上解决缺依赖类问题的常用入口,openEuler、银河麒麟、统信 UOS 服务器版都支持。

基本信息

按文件查dnf provides /usr/bin/命令
通配查询dnf provides '*/netstat'
按能力查dnf provides 'perl(JSON::PP)'
已装文件反查rpm -qf /path/file
前置条件仓库元数据可用(repolist 非空)

典型使用场景

  • 脚本报 command not found,确认需要安装哪个包
  • 编译或运行时报缺共享库,反查提供该库的包
  • 迁移后补装工具,快速定位所属软件包
  • 排查文件重复:确认某文件由哪个已装包提供
  • 核对依赖来源,判断漏洞公告涉及的包范围

典型用法

典型用法
dnf provides '*/netstat'          # 通配写法,不知完整路径时可用
dnf provides /usr/bin/tcpdump     # 已知路径直接查
rpm -qf $(which ls)               # 反查已装文件属于哪个包
dnf provides 'perl(JSON::PP)'     # 按提供的能力查询
rpm -q --whatprovides 'libssl.so.1.1'   # 已装环境里反查库的提供者
dnf makecache                     # 元数据未缓存时先刷新再查

查询方式对照

需求命令说明
找命令属于哪个包dnf provides '*/命令名'查询仓库元数据
找已装文件归属rpm -qf /path只对已安装文件有效
查能力与虚拟提供dnf provides '能力名'适合语言模块与库
反查库依赖者rpm -q --whatrequires 包评估卸载影响时使用
刷新元数据dnf makecache查询前先确保数据新鲜
通配写法适合不知道完整路径的场景;包元数据未缓存时查询会失败或结果不全,先执行 dnf makecache 再查。

缺命令时的排查思路

  • 先用 rpm -qf 判断文件是否已安装但不在 PATH 里
  • 确认未安装后再用 provides 反查所属包
  • 核对当前启用的仓库是否包含该软件包
  • 语言模块与共享库用能力名或路径查询

易错点

  • 仓库未配置或全部禁用时查不到结果:先确认 repolist 非空,再判断是不是真的没有这个包
  • 同一文件被多个包提供时直接装第一个:多种 JDK 或运行库并存要按版本与许可要求人工选择
  • 混淆 provides 与 rpm -qf 的数据源:前者查仓库可安装信息,后者查已安装文件,结论不能互相替代
  • 通配查询不加引号导致被 shell 提前展开:写成 dnf provides '*/netstat' 才不会出错
  • 把命令找不到一律当成缺包:也可能是已安装但路径未加入环境变量,先 which 与 rpm -qf 核实

数据来源与参考

  • dnf provides 文档
  • RPM 手册
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌