dnf和yum区别

2026-07-04 10:41:00
836字
4.6分钟
一句话概括:dnf 是 yum 的下一代升级版,你可以把 dnf 看作"优化重构后的yum"

通俗来说,yum 和 dnf 都是 CentOS 系统里的“软件管家”或“应用商店”。

它们存在的唯一核心目的,就是帮你自动解决“安装软件”这件事——包括找软件、下载软件、自动安装依赖包,以及后续的卸载和更新。

在 CentOS 系统中,它们的关系类似于“老款发动机”和“新款涡轮增压发动机”——操作逻辑几乎一样,但底层的实现和技术架构完全不同。

1. 出身与技术栈

  • yum(Yellowdog Updater Modified):诞生于 Python 2 时代,代码体量庞大且历史悠久。随着发展,其内部依赖关系解析的算法变得非常复杂,维护困难,被称为“意大利面条式代码”。
  • dnf(Dandified YUM):于 Fedora 18 引入,在 CentOS 8 中成为默认。它完全重写了底层,核心依赖库从 Python 换成了 C/C++(libdnf),并采用了更先进的 SAT(可满足性理论)求解器(来自 openSUSE 的 libsolv 库)。

2. 依赖关系解析

  • yum 的依赖解析:采用较旧的迭代算法。当安装多个软件包时,如果依赖关系复杂,可能会陷入“依赖地狱”,解析过程较慢,且偶尔会出现循环依赖导致安装失败。
  • dnf 的依赖解析:SAT 求解器能在极短时间内计算出最优的安装/升级方案,处理复杂依赖的能力更强,出错率更低。通常 dnf 的包依赖计算速度比 yum 快 20%-30%。

3. 内存与资源占用

  • yum:整个工具由纯 Python 编写,运行时内存占用较高,且启动加载时间较长。
  • dnf:核心事务处理由 C/C++ 实现,Python 仅作为前端 CLI(命令行界面)外壳。这使得 dnf 启动更快,内存占用更低,对服务器资源更友好。

4. API 与插件机制

  • yum:插件机制较为混乱,缺少稳定的 API 文档,第三方插件经常随 yum 版本更新而失效。
  • dnf:提供了严格且稳定的 API 接口,插件与主程序解耦。即使 dnf 升级,已安装的插件通常也不受影响,扩展性更强。

5. 实际使用规范

操作系统该用什么实际情况
CentOS 7只能用 yumCentOS 7 默认只有 yum,系统未内置 dnf(强行安装可能破坏系统,不建议)
CentOS 8 / Rocky Linux 8+ / AlmaLinux 8+直接用 dnf 更优虽然这些系统输入 yum 命令也能用(因为 yum 被软链接指向了 dnf),但输入 dnf 调用的是原生的高性能引擎。

6. 常用命令对照表

操作目的yum 写法dnf 写法
安装软件yum install nginxdnf install nginx
更新所有包yum updatednf upgrade/dnf update
搜索软件yum search pythondnf search python
查看历史操作yum historydnf history(输出信息比 yum 更详细清晰)
安装软件组yum groupinstall "Development Tools"dnf group install "Development Tools"
如果你在 CentOS 8 上执行 yum --version,你会发现它其实打印的是 dnf 的版本号,因为系统做了一个软链接(/usr/bin/yum -> dnf)
2022-2026 小紫念沁 版权所有