🍥 DNF 与 YUM 的区别详解:从 CentOS 7 到 CentOS 9 的演进
标签:CentOS、YUM、DNF、Linux 包管理、系统升级、兼容性
适用版本:CentOS 7、CentOS 8、CentOS 9
🧩 一、背景介绍
CentOS 中使用的包管理工具是 RedHat 系列系统的重要组成部分。随着系统版本升级,包管理器从 yum
(CentOS 7)逐渐过渡到 dnf
(CentOS 8 及之后版本)。
📌 二、YUM 与 DNF 对比表
对比项 | YUM(CentOS 7) | DNF(CentOS 8/9) |
---|---|---|
基础语言 | Python 2 | Python 3 |
依赖解析 | 自定义逻辑 | 使用 libsolv ,更高效 |
性能 | 相对较慢 | 更快、并发解析依赖 |
插件架构 | 支持但较弱 | 插件系统更现代、可扩展 |
API | 旧版 API | 新的 Python API 接口 |
命令兼容性 | 经典命令 yum install 等 | 保持兼容,也可用 dnf 命令 |
容器兼容性 | 适合传统环境 | 更适合云原生、容器打包 |
云原生支持 | 无内建支持 | 支持模块化、AppStream 等 |
替代命令 | yum 命令(真实为软链接) | /usr/bin/yum → /usr/bin/dnf |
默认包管理器 | CentOS 7 | CentOS 8 及以后 |
🧪 三、Shell 示例对比
🧱 CentOS 7 示例(基于 YUM)
# 安装 nginx
yum install -y nginx# 清理缓存
yum clean all# 生成缓存
yum makecache
🚀 CentOS 8/9 示例(基于 DNF)
# 安装 nginx
dnf install -y nginx# 清理缓存
dnf clean all# 生成缓存
dnf makecache
💡 补充:CentOS 8/9 中的 yum 命令其实是软链接
$ which yum
/usr/bin/yum$ ls -l /usr/bin/yum
lrwxrwxrwx 1 root root 5 /usr/bin/yum -> dnf
🧬 四、系统内核层变化(Kernel Support)
项目 | CentOS 7 | CentOS 8 | CentOS Stream 9 / RHEL9 |
---|---|---|---|
默认内核版本 | 3.10.x(较旧) | 4.18(较新) | 5.14+(更适合云原生与容器) |
cgroups 支持 | cgroups v1 | 默认 cgroups v1(可切换 v2) | 默认 cgroups v2 |
systemd 版本 | 较老 systemd | systemd 更新 | 完全支持 systemd + 容器化 |
云原生支持 | 基础支持 | 改进镜像管理、模块化仓库支持 | 支持 Podman、Cloud-Init、OCI |
🧭 五、兼容性建议
使用场景 | 推荐版本 | 包管理器建议 |
---|---|---|
传统运维服务器 | CentOS 7 | 使用 YUM |
云主机 / 轻量部署 | CentOS 8 | 使用 DNF |
容器构建 | CentOS 9 | 使用 DNF + 模块 |
🔚 六、小结
YUM
仍然可以在 CentOS 8/9 中使用,但其实就是dnf
的别名。DNF
在依赖管理、性能和容器友好性上远超YUM
。- 对于脚本和运维工具,推荐使用
dnf
,并检测系统版本以适配。
📦 七、判断系统版本的 Shell 兼容写法
# 判断系统版本选择合适的包管理器
if grep -q -i "release 7" /etc/redhat-release; thenPM="yum"
elsePM="dnf"
fi# 使用示例
$PM install -y wget curl
🔖 关注专栏《版本那些事》获取更多运维干货!