CentOS/RHEL 系統管理常見困惑:yum upgrade 與 yum update 到底差在哪?官方文件說明:
- yum update:更新所有套件包含核心,必要時會安裝新套件、移除舊套件以滿足相依。
- yum upgrade:等同
yum update --obsoletes,處理淘汰套件,但在 RHEL/CentOS 7 以前不更新核心套件(除非明確指定)。
本文以 CentOS 5.5 實測驗證差異。
實測環境
| 項目 | 升級前 |
| 系統版本 | CentOS 5.5 |
| 核心版本 | 2.6.18-194.el5 |
執行 yum -y upgrade
| 項目 | 升級後 |
| 系統版本 | CentOS 5.7 |
| 核心版本 | 2.6.18-194.el5 (未變) |
執行 yum -y update
| 項目 | 升級後 |
| 系統版本 | CentOS 5.7 |
| 核心版本 | 2.6.18-238.el5 (已更新) |
關鍵差異總結
| 指令 | 更新一般套件 | 更新核心 | 處理淘汰套件 | 適用場景 |
yum update | ✅ | ✅ | ✅ (含 --obsoletes) | 例行維護、安全性更新、想要最新核心 |
yum upgrade | ✅ | ❌ (舊版) | ✅ (內建 --obsoletes) | 不想動核心、僅更新應用層套件 |
現代版本(CentOS 7+/RHEL 7+/Fedora)補充
自 yum 3.4.3 起(CentOS 7 預設),upgrade 內建 --obsoletes 且會更新核心,兩者行為幾乎相同。若需「不更新核心」,可用:
yum update --exclude=kernel* # 排除核心套件
yum upgrade --exclude=kernel*
最佳實踐建議
- 生產環境:先在測試機跑
yum check-update 審視將更新套件,再排程維護視窗執行 yum update。
- 核心鎖定:若應用依賴特定核心模組(如專有驅動),在
/etc/yum.conf 加入 exclude=kernel* 或使用 yum versionlock。
- 離線/內網環境:建立本地
yum repo(createrepo),確保版本一致性。
- 事務紀錄:
yum history 可查看、回滾、重做任意交易。
簡單記憶:update = 全面更新(含核心),upgrade = 處理淘汰套件(舊版不動核心)。現代版本兩者趨同,以 update 為主流指令。