首页/系统/信创系统运维速查/dnf 基础命令(安装与查询)
命令与包管理65 条

dnf 基础命令(安装与查询)

dnf 是 rpm 系发行版(Kylin/UOS 服务器版、openEuler)的包管理器,取代 yum 但兼容其命令习惯;日常就是装、删、查、更新四类操作。

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

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 再重建缓存,否则旧数据继续生效。

易错点

  • dnf 与 yum 混用不冲突,但脚本里固定一种写法便于审计与排错,混写会让人误判实际执行路径
  • 离线环境里 install 找不到包先看 repolist:源为空时 dnf 报的是找不到包,很容易被误判成包名写错
  • 生产环境不加确认就 dnf upgrade,可能连带升级内核与 glibc,重启后业务起不来
  • 更换源文件后不 clean 缓存,dnf 仍用旧元数据,出现「明明有包却装不上」或版本不对

数据来源与参考

  • dnf 官方文档(dnf.readthedocs.io)
  • openEuler 包管理指南
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌