DNF 和 Yum 的区别，为什么 Yum 会被 DNF 取代？
由于 Yum 中许多长期存在的问题仍未得到解决，因此 Yum 包管理器已被 DNF 包管理器取代。
DNF Yum
27.38.245.54
哦
来自广东深圳的 Chrome 79.0|Windows 7 用户
2020-05-06T21:23:37.000
220.248.226.34
匿名回复么
来自安徽合肥的 Firefox 76.0|Windows 10 用户
2020-05-27T12:57:40.000
60.247.104.68
上面那个大图片不觉得碍事吗
来自北京的 Chrome 92.0|Windows 10 用户
2021-11-22T17:20:12.000
124.71.93.207
知道了
来自香港的 Chrome 97.0|Windows 10 用户
2022-01-19T16:25:01.000
112.224.155.68
可能人家觉得好看吧
来自山东的 Chrome 98.0|Windows 10 用户
2022-02-26T18:02:44.000
45.156.24.67
但是，我 yum install DNF 从来就没有成功过
来自美国的 Chrome 99.0|Windows 7 用户
2022-03-26T08:13:00.000
203.218.254.189
apt install dnf 试试
来自香港的 Chrome 106.0|Windows 10 用户
2022-10-25T17:01:55.000
111.60.22.178
pacman大法好. doge.
来自111.60.22.178的 Firefox 91.0|GNU/Linux 用户
2022-11-12T18:50:40.000
171.35.210.26
yum 已经变成 dnf 的别名了.<br />
使用 ls -l $(which yum) 命令可以看到 yum 是是个指向 dnf-3 的链接.
来自江西新余的 Firefox 107.0|GNU/Linux 用户
2022-12-08T20:36:49.000
由于 Yum 中许多长期存在的问题仍未得到解决，因此 Yum 包管理器已被 DNF 包管理器取代。
![](/data/attachment/album/202004/29/093910jjxifk8mewuxmgos.jpg)


由于 Yum 中许多长期存在的问题仍未得到解决，因此 [Yum 包管理器](https://www.2daygeek.com/yum-command-examples-manage-packages-rhel-centos-systems/)已被 [DNF 包管理器](https://www.2daygeek.com/linux-dnf-command-examples-manage-packages-fedora-centos-rhel-systems/)取代。这些问题包括性能差、内存占用过多、依赖解析速度变慢等。


DNF 使用 `libsolv` 进行依赖解析，由 SUSE 开发和维护，旨在提高性能。


Yum 主要是用 Python 编写的，它有自己的应对依赖解析的方法。它的 API 没有完整的文档，它的扩展系统只允许 Python 插件。


Yum 是 RPM 的前端工具，它管理依赖关系和资源库，然后使用 RPM 来安装、下载和删除包。


为什么他们要建立一个新的工具，而不是修复现有的问题呢？


Ales Kozamblak 解释说，这个修复在技术上是不可行的，而且 Yum 团队还没有准备好立即接受修改。


另外，最大的挑战是，Yum 有 56000 行代码，但 DNF 只有 29000 行代码。


所以除了分叉，没有办法解决。


不过 Yum 的运行情况还算可以。




| 编号 | DNF（Dandified YUM） | YUM（Yellowdog Updater, Modified） |
| --- | --- | --- |
| 1 | DNF 使用 libsolv 来解析依赖关系，由 SUSE 开发和维护 | YUM 使用公开的 API 来解析依赖关系 |
| 2 | API 有完整的文档 | API 没有完整的文档 |
| 3 | 由 C、C++、Python 编写的 | 只用 Python 编写 |
| 4 | DNF 目前在 Fedora、RHEL 8、CentOS 8、OEL 8 和 Mageia 6/7 中使用 | YUM 目前在 RHEL 6/7、CentOS 6/7、OEL 6/7 中使用 |
| 5 | DNF 支持各种扩展 | Yum 只支持基于 Python 的扩展 |
| 6 | API 有良好的文档，因此很容易创建新的功能 | 因为 API 没有正确的文档化，所以创建新功能非常困难 |
| 7 | DNF 在同步存储库的元数据时，使用的内存较少 | 在同步存储库的元数据时，YUM 使用了过多的内存 |
| 8 | DNF 使用满足性算法来解决依赖关系解析（它是用字典的方法来存储和检索包和依赖信息） | 由于使用公开 API 的原因，Yum 依赖性解析变得迟钝 |
| 9 | 从内存使用量和版本库元数据的依赖性解析来看，性能都不错 | 总的来说，在很多因素的影响下，表现不佳 |
| 10 | DNF 更新：在 DNF 更新过程中，如果包中包含不相关的依赖，则不会更新 | YUM 将在没有验证的情况下更新软件包 |
| 11 | 如果启用的存储库没有响应，DNF 将跳过它，并继续使用可用的存储库处理事务 | 如果有存储库不可用，YUM 会立即停止 |
| 12 | `dnf update` 和 `dnf upgrade` 是等价的 | 在 Yum 中则不同 |
| 13 | 安装包的依赖关系不更新 | Yum 为这种行为提供了一个选项 |
| 14 | 清理删除的包：当删除一个包时，DNF 会自动删除任何没有被用户明确安装的依赖包 | Yum 不会这样做 |
| 15 | 存储库缓存更新计划：默认情况下，系统启动后 10 分钟后，DNF 每小时会对配置的存储库检查一次更新。这个动作由系统定时器单元 `dnf-makecache.timer` 控制 | Yum 也会这样做 |
| 16 | 内核包不受 DNF 保护。不像 Yum，你可以删除所有的内核包，包括运行中的内核包 | Yum 不允许你删除运行中的内核 |
| 17 | libsolv：用于解包和读取资源库。hawkey: 为 libsolv 提供简化的 C 和 Python API 库。librepo: 提供 C 和 Python（类似 libcURL）API 的库，用于下载 Linux 存储库元数据和软件包。libcomps: 是 yum.comps 库的替代品。它是用纯 C 语言编写的库，有 Python 2 和 Python 3 的绑定。 | Yum 不使用单独的库来执行这些功能 |
| 18 | DNF 包含 29000 行代码 | Yum 包含 56000 行代码 |
| 19 | DNF 由 Ales Kozumplik 开发 | YUM 由 Zdenek Pavlas、Jan Silhan 和团队成员开发 |




---


via: <https://www.2daygeek.com/comparison-difference-between-dnf-vs-yum/>


作者：[Magesh Maruthamuthu](https://www.2daygeek.com/author/magesh/) 选题：[lujun9972](https://github.com/lujun9972) 译者：[wxy](https://github.com/wxy) 校对：[wxy](https://github.com/wxy)


本文由 [LCTT](https://github.com/LCTT/TranslateProject) 原创编译，[Linux中国](https://linux.cn/) 荣誉推出

