DNF 与 YUM 的区别详解:从 CentOS 7 到 CentOS 9 的演进

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; then
    PM="yum"
else
    PM="dnf"
fi

# 使用示例
$PM install -y wget curl

关注专栏《版本那些事》获取更多运维干货!

你可能感兴趣的:(DNF 与 YUM 的区别详解:从 CentOS 7 到 CentOS 9 的演进)