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 反查所属包
- 核对当前启用的仓库是否包含该软件包
- 语言模块与共享库用能力名或路径查询