dnf 是什么
dnf(Dandified Yum)是 rpm 系发行版的软件包管理器,负责从软件源拉取元数据、解析依赖、下载并安装 rpm 包,同时维护完整的操作历史以便回滚。它与 yum 是同一套系统的两代实现:RHEL 8、CentOS 8、openEuler、麒麟 V10 服务器版、UOS 服务器版都用 dnf,命令习惯仍兼容 yum,所以老教程里的 yum install 一般照样能跑,实际执行的是 dnf。相比早期 yum,dnf 用 libsolv 做依赖求解,处理复杂的依赖冲突与多版本场景更稳,速度也更快。
基本信息
| 所属 | dnf(Dandified Yum),rpm 包体系 |
|---|---|
| 适用平台 | openEuler / Kylin V10 服务器版 / UOS 服务器版 / RHEL 8+ |
| 语法 | dnf [全局选项] 子命令 [包名...] |
| 配置文件 | /etc/dnf/dnf.conf |
| 软件源目录 | /etc/yum.repos.d/ 下的 .repo 文件 |
| 缓存目录 | /var/cache/dnf |
| 权限 | 查询可普通用户,安装、删除、更新需 root 或 sudo |
典型使用场景
- 新机器装基础组件:dnf install -y vim tar chrony 一次补齐常用工具
- 确认包来源:装之前用 dnf info 看版本、体积与来自哪个仓库,避免装上测试源里的包
- 找包不分清包名:知道文件或命令名但不知道对应包,用 provides 反查
- 审计变更:dnf history 能列出谁在什么时候装了什么,配合 undo 回退整个事务
- 巡检已装软件:list installed 导出清单,做基线对比
- 源没配好时排障:repolist 为空或报错基本就是源文件或网络问题
常用子命令
常用子命令
dnf install -y nginx # 安装,自动解析依赖
sudo dnf remove nginx # 卸载,连带清理不再被依赖的包
dnf search keyword # 按关键字搜包名与描述
dnf info nginx # 看版本、体积、来源仓库
dnf list installed | head # 列出已安装的包
dnf repolist # 确认软件源是否可用
dnf provides /usr/sbin/ip # 反查文件属于哪个包
dnf history # 查看事务历史,配合 undo 回滚子命令对照
| 子命令 | 用途 | 备注 |
|---|---|---|
| install | 安装指定包 | 加 -y 免交互,生产前先 info 确认版本 |
| remove | 卸载包 | 会连带移除仅被它依赖的包,注意提示清单 |
| upgrade / update | 升级 | update 在新版本中已等同 upgrade |
| provides | 按文件或能力反查包 | 路径要写绝对路径 |
| repolist | 列出可用仓库 | 为空说明源未配置或不可达 |
| clean / makecache | 清缓存、重建元数据缓存 | 换源或改源地址后必执行 |
| history | 查看与回滚事务 | undo 按事务号整批回退 |
装包前用 dnf info 核对版本来源、用 repolist 确认源清单,是信创环境里避免「装了不对版本」最省事的两步。变更源地址或替换源文件之后,先 dnf clean all 再 dnf makecache,否则元数据还是旧的。
部分新版发行版用模块(module)管理同一软件的多个版本流,例如 openEuler 的某些开发组件需要先 dnf module list 看可用流、再 dnf module enable 启用。是否启用取决于发行版与软件,配不上模块时命令会直接报错,按报错提示判断即可。
生产机上执行 dnf upgrade 会成批替换系统组件甚至内核,可能引入与业务不兼容的新版本;升级范围应先在测试环境验证,并确认有快照或备份可以回退。
装包报错对照
| 报错关键字 | 常见原因 | 处理方向 |
|---|---|---|
| Unable to find a match | 源里没有这个包,或源未配置 | 先 dnf repolist 确认源,再核对包名拼写 |
| Failed to download metadata | 源地址不可达或网络受限 | 测通地址,检查代理与 DNS 设置 |
| GPG key retrieval failed | 公钥缺失或校验不通过 | 导入发行版公钥,或按规范修正校验选项 |
| conflicts between packages | 与已装版本冲突 | 看清提示里将被替换或移除的包再决定 |
dnf 的元数据有本地缓存,机器长期不刷新时会拿着旧索引找包,表现为版本对不上或找不到新包,执行 dnf makecache 可强制刷新;更换源地址之后要先 dnf clean all 再重建缓存,否则旧数据继续生效。