RPM (RPM Package Manager) 是 Red Hat 系列發行版 (RHEL、CentOS、Fedora、openSUSE、Rocky、AlmaLinux) 的核心軟體包管理工具,掌握其安裝、升級、移除、查詢、驗證、簽名檢查與資料庫維護指令,是 Linux 系統管理的基本功。
核心操作速查表
| 操作 | 指令 | 常用參數組合 |
| 安裝 | rpm -i / --install | -ivh (詳細+進度條)、--test (試運行)、--nodeps (忽略依賴)、--force (強制覆蓋) |
| 升級 | rpm -U / --upgrade | -Uvh、--oldpackage (降級)、--test |
| 移除 | rpm -e / --erase | -v、--nodeps、--test |
| 查詢已安裝 | rpm -q / --query | -qa (全部)、-qi pkg (資訊)、-ql pkg (檔案列表)、-qc pkg (設定檔)、-qd pkg (文件)、-qf /path/file (反查屬於哪包) |
| 查詢未安裝包檔 | rpm -qp / --query --package | -qip pkg.rpm (資訊)、-qlp pkg.rpm (檔案列表)、-qscrp pkg.rpm (腳本) |
| 驗證已安裝包 | rpm -V / --verify | -Va (全部)、-Vf /path/file、--nodeps、--nofiles |
| 檢查包簽名/完整性 | rpm -K / --checksig | -K pkg.rpm、--nopgp |
| 資料庫維護 | --rebuilddb、--initdb | 修復損毀、建立新資料庫 |
詳細參數說明
安裝/升級共用參數
-h / --hash:顯示 # 進度條。
--percent:百分比進度 (適合腳本解析)。
--excludedocs / --includedocs:排除/包含文件檔。
--replacepkgs:強制重裝已安裝包。
--replacefiles:替換屬於其他包的檔案。
--force:等同 --replacepkgs --replacefiles。
--noscripts:不執行 %pre/%post/%preun/%postun 腳本。
--prefix 路徑:重新導向安裝路徑 (需包支援)。
--ignorearch / --ignoreos:忽略架構/作業系統檢查。
--nodeps:極度危險,忽略所有依賴關係,可能破壞系統一致性。
--ftpproxy / --ftpport:FTP 代理/埠設定 (舊版支援)。
查詢資訊選項 (-q 專用)
-i:摘要資訊 (名稱、版本、釋出、架構、安裝日期、大小、授權、建構主機、供應商、描述)。
-l:檔案清單。
-c:設定檔清單 (標記為 %config)。
-d:文件檔清單 (%doc)。
-s:檔案狀態 (normal, not installed, replaced 等)。
--scripts:顯示安裝/移除/驗證腳本內容。
--queryformat / --qf "格式字串":自訂輸出格式 (如 "%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n")。
--dump:每檔案完整驗證資訊 (md5, mtime, size, mode, owner, group 等)。
--provides:包提供的能力 (虛擬包、庫 soname 等)。
--requires / -R:包需要的能力。
驗證輸出代碼 (-V)
S.M.D.G.U.L.T.C (8 字元)
S: 大小異常 M: 模式/權限異常 D: 裝置主/次號異常
G: 群組異常 U: 擁有者異常 L: 符號連結異常
T: 時間異常 C: 能力/設定檔異常 .: 正常
實戰範例
1. 完整安裝流程
# 下載
wget https://repo.example.com/pkg-1.0-1.x86_64.rpm
# 檢查簽名
rpm -K pkg-1.0-1.x86_64.rpm
# 試運行
rpm -i --test pkg-1.0-1.x86_64.rpm
# 正式安裝
rpm -ivh pkg-1.0-1.x86_64.rpm
2. 查詢與審計
# 所有已安裝包
rpm -qa | sort
# 查詢 httpd 詳細資訊
rpm -qi httpd
# 列出 httpd 安裝的所有檔案
rpm -ql httpd
# 找出 /etc/httpd/conf/httpd.conf 屬於哪個包
rpm -qf /etc/httpd/conf/httpd.conf
# 列出所有設定檔
rpm -qc httpd
3. 驗證系統完整性 (資安稽核)
# 驗證所有包
rpm -Va > /var/log/rpm_verify_$(date +%F).log
# 過濾異常項目
rpm -Va | grep -v "^........ "/
4. 移除與降級
# 移除
rpm -e pkg-name
# 降級 (需指定舊版 rpm 檔)
rpm -Uvh --oldpackage pkg-0.9-1.x86_64.rpm
5. 自訂查詢格式 (腳本友善)
rpm -qa --qf "%{NAME}\t%{VERSION}-%{RELEASE}\t%{ARCH}\t%{INSTALLTIME:date}\t%{SIZE}\n" | column -t
進階主題
RPM 宏與建構環境
~/.rpmmacros、/etc/rpm/macros.* 定義建構路徑、簽名金鑰、壓縮演算法等。
rpmbuild -ba SPEC檔 從原始碼建構 RPM。
rpmspec -q SPEC檔 解析 SPEC 檔相依性。
YUM/DNF 前端對比
| 特性 | RPM (底層) | YUM/DNF (前端) |
| 依賴解析 | 手動/--nodeps | 自動下載並解決 |
| 倉庫管理 | 無 | 支援多倉庫、優先權、模組 |
| 交易歷程 | 無 | dnf history 回滾 |
| 適用場景 | 單包操作、腳本、離線、建構 | 日常管理、系統更新、自動化 |
最佳實務
- 日常管理優先用 DNF/YUM,RPM 用於單包檢查、離線安裝、腳本、建構。
- 生產環境嚴禁常態使用 --nodeps/--force,必須在變更管理流程中評估風險。
- 定期
rpm -Va 稽核關鍵系統檔案完整性,納入資安基準。
- 保留
/var/log/rpmpkgs* (舊版) 或 dnf history 記錄,支援審計與回滾。
- 簽名驗證:匯入官方 GPG 金鑰 (
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-*),啟用 gpgcheck=1。
RPM 是 Linux 軟體生命週期的基石。精通其查詢、驗證、資料庫維護與腳本整合能力,能讓系統管理員在從最小容器到大規模叢集的各種環境中,精準掌控軟體狀態、確保供應鏈安全與合規合規。