RPM(Red Hat Package Manager)是 Red Hat 系發行版的基石。掌握 rpm 底層指令,能在 YUM/DNF 失效、離線環境、精確版本控制場景下遊刃有餘。本文系統整理五大操作類別、常用參數、資料庫維護與 SRPM/YUM 演進脈絡。
| 操作 | 指令模板 | 關鍵參數 |
|---|---|---|
| 安裝 | rpm -ivh pkg.rpm | --test 試裝、--replacepkgs 重裝、--force 強制、--nodeps 忽略依賴 |
| 升級 | rpm -Uvh pkg.rpm | -F 僅升級已裝、--oldpackage 降級、--test 試升級 |
| 移除 | rpm -e pkg-name | --allmatches 全刪、--nodeps 忽略依賴、--test 試移除 |
| 查詢 | rpm -q ... | -a 全部、-f file 反查、-i 資訊、-l 檔案列表、-c 設定檔、--scripts 腳本 |
| 驗證 | rpm -V pkg-name | 輸出 8 字元狀態碼(S M 5 D L U G T),--import 驗簽 |
S.M5DLUGT c /etc/httpd/conf/httpd.conf
||||||||
|||||||+-- T: mTime 修改時間變更
||||||+--- G: Group 群組變更
|||||+---- U: User 擁有者變更
||||+----- L: symLink 符號連結目標變更
|||+------ D: Device 設備檔案屬性變更
||+------- 5: MD5 雜湊值變更(內容被修改)
|+-------- M: Mode 權限位變更
+--------- S: Size 大小變更
c = 設定檔
# 1. 離線安裝(已下載 rpm 及依賴)
rpm -ivh --nodeps *.rpm # 忽略依賴順序,最後再 rpm -e --nodeps 清理失敗包
# 2. 查詢某檔案屬於哪個套件
rpm -qf /usr/sbin/nginx
# nginx-1.24.0-1.el7.ngx.x86_64
# 3. 列出套件安裝的所有設定檔
rpm -qc nginx | head
# /etc/nginx/nginx.conf
# /etc/nginx/fastcgi_params
# /etc/logrotate.d/nginx
# 4. 驗證系統關鍵檔案是否被竄改
rpm -Va | grep -E '^..5' | head -20
# 找出 MD5 變更的檔案(潛在入侵徵兆)
# 5. 重建 RPM 資料庫(索引損壞、掛起)
rpm --rebuilddb
# 或初始化(慎用,會清空)
rpm --initdb
nginx-1.24.0-1.el7.ngx.x86_64.rpm
│ │ │ │ │ │
│ │ │ │ │ └─ 架構
│ │ │ │ └───── 發布商/倉庫標識
│ │ │ └──────── 釋出版本
│ │ └─────────── 套件版本
│ └─────────────────── 套件名稱
└───────────────────────── 可選:epoch
.src.rpmspec 檔、原始碼 tarball、patchrpmbuild --rebuild pkg.src.rpm → 產出 ~/rpmbuild/RPMS/ 下的二進制 rpm| 特性 | YUM (v3) | DNF (v4) |
|---|---|---|
| 依賴解析器 | Python 2、較慢 | libsolv (C++)、快 10 倍 |
| 模組化支援 | 無 | dnf module(AppStream) |
| API 穩定性 | 成熟 | 現代化、支援插件 |
| 相容指令 | yum | dnf(兼容 yum 別名) |
yum install nginx-1.24.0-1.el7.ngx 或 dnf versionlock add nginxyumdownloader --resolve nginx 下載全依賴樹,配合 createrepo 建本地源rpm --rebuilddb 維護索引健康rpm -Va > /var/log/rpm_verify_$(date +%F).log結語: RPM 是「核武器」,YUM/DNF 是「導彈發射井」。日常用發射井,關鍵時刻(離線、降級、審計、重建)直接按核武器按鈕。熟練 rpm -qVa、--rebuilddb、SRPM rebuild,是資深運維的硬核基本功。