🍥 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
🔖 關注專欄《版本那些事》獲取更多運維干貨!