dnf 搜索与反查
在 RPM 体系里找包有两个方向:想知道「有哪些包跟我说的关键词有关」,用 dnf search 在仓库元数据的包名与摘要里搜;想知道「这个命令或这个库文件到底由哪个包提供」,用 dnf provides 反查能力与文件路径。两条路都基于本地缓存的仓库元数据,所以结果准不准取决于缓存有多新——找不到东西时先怀疑缓存,而不是怀疑这个包不存在。
基本信息
| 用途 | 搜索包、反查文件与能力归属、查看包详情 |
|---|---|
| 语法 | dnf search|provides|info|list|repoquery 关键词或路径 |
| 适用平台 | RHEL 8 及以上、CentOS Stream、Fedora、Rocky、Alma 用 dnf;CentOS 7 用 yum,底层同为 libdnf 前身 |
| 前提 | 仓库元数据已下载到本地缓存,可用 dnf makecache 刷新 |
典型使用场景
- 装软件前先看有什么:不清楚包名全称时先 search,再决定装哪一个
- 命令缺失定位:ifconfig、netstat 这类命令没了,用 provides 反查装哪个包能补回来
- 库文件缺失:应用报找不到某个 .so,用 provides 查它属于哪个包
- 装机脚本校验:脚本里用 list 或 repoquery 确认目标包在仓库里可获取
- 排查版本来源:同一个包在多个仓库都有,用 info 看它到底来自哪个源
常用的两个方向
常用的两个方向
dnf search -v nginx # 在包名与摘要里搜,-v 输出更详细
dnf provides '*/ifconfig' # 反查:哪个包提供这个文件
dnf provides /usr/bin/python3 # 直接给绝对路径也行
dnf repoquery -l nginx # 列出包内文件清单(需 dnf-plugins-core)
dnf list --installed | head # 只看已安装的包
dnf info kernel-devel # 看版本、仓库、大小、依赖已安装文件的归属
已安装文件的归属
rpm -qf /usr/bin/rsync # 已安装文件属于哪个包
rpm -qi nginx # 已安装包的详情
rpm -ql nginx | head # 已安装包的文件清单
rpm -q --whatprovides 'libcurl.so.4' # 反查提供某能力的已装包查询子命令对照
| 子命令 | 查什么 | 注意 |
|---|---|---|
| search | 包名与摘要中的关键词 | 结果多时先看仓库来源 |
| provides | 某个文件或能力由谁提供 | 支持通配,如 */curl,模式要加引号 |
| info | 包的版本、仓库、体积、依赖 | 多个仓库有同名包时逐个看 |
| repoquery -l | 包内的文件清单 | 需要 dnf-plugins-core 支持 |
| rpm -qf | 已安装文件的归属 | 只对已安装内容有效 |
provides 搜不到东西时,先执行 dnf makecache 刷新元数据,再确认相关仓库是否启用(dnf repolist --all 能列出被禁用的仓库)。离线环境里则要检查本地仓库索引是否更新过。
同一个命令可能由多个包提供,例如 nc 在部分发行版里由 netcat 或 nmap-ncat 分别提供。装机前用 dnf repoquery -l 看清包里到底装了什么,避免引入一大串不想要的依赖。