RPM(Red Hat Package Manager)是 Red Hat 系發布版(RHEL、CentOS、Fedora、openSUSE 等)的核心軟體封裝格式。熟練掌握 rpm 底層指令,能在無網路、離線環境或自動化部署中精準控制軟體生命週期。本文系統整理安裝、升級、查詢、卸載、提取檔案、來源碼重建等實戰操作。
# 基本安裝
rpm -ivh package.rpm # -i 安裝 -v 詳細 -h 進度條
# 強制安裝(忽略檔案衝突)
rpm -ivh --force package.rpm
# 忽略相依性安裝(慎用)
rpm -ivh --nodeps package.rpm
# 升級安裝(舊版存在則升級,不存在則安裝)
rpm -Uvh package.rpm
# 降級安裝
rpm -Uvh --oldpackage old-version.rpm
# 重新安裝(修復損壞檔案)
rpm -ivh --replacepkgs package.rpm
# 1. 安裝 src.rpm(釋出 spec 與原始碼至 ~/rpmbuild 或 /usr/src/redhat)
rpm -ivh package.src.rpm
# 2. 進入 SPECS 目錄
cd ~/rpmbuild/SPECS # 或 /usr/src/redhat/SPECS
# 3. 僅做準備階段(解壓、打補丁)
rpmbuild -bp package.spec
# 4. 完整建置二進位 RPM
rpmbuild -bb package.spec
# 5. 安裝產出的 RPM
rpm -ivh ~/rpmbuild/RPMS/x86_64/package-*.rpm
rpm -ivh package.src.rpm
cd ~/rpmbuild/BUILD/package-*/
./configure --prefix=/usr/local/package
make
make install
# 基本卸載(套件名稱不含 .rpm 副檔名)
rpm -e package-name
# 強制卸載(忽略被其他套件相依)
rpm -e --nodeps package-name
# 查詢套件確切名稱再卸載
rpm -q package-keyword
rpm -e $(rpm -q package-keyword)
| 需求 | 指令 | 說明 |
|---|---|---|
| 列出所有已安裝套件 | rpm -qa | 配合 grep 過濾 |
| 查詢套件是否安裝 | rpm -q package | 回傳完整版本號 |
| 查詢套件詳細資訊 | rpm -qi package | 版本、描述、建置時間、安裝大小等 |
| 列出套件安裝的所有檔案 | rpm -ql package | 已安裝套件 |
| 列出未安裝 RPM 內含檔案 | rpm -qlp package.rpm | 離線檢視 |
| 查詢檔案屬於哪個套件 | rpm -qf /path/to/file | 絕對路徑 |
| 查詢指令屬於哪個套件 | rpm -qf $(which cmd) | 反引號或 $() |
| 驗證套件檔案完整性 | rpm -V package | S=大小 M=模式 5=MD5 U=用戶 G=群組 T=時間 |
| 查看套件變更日誌 | rpm -q --changelog package | — |
| 查看套件安裝/卸載腳本 | rpm -q --scripts package | prein/postin/preun/postun |
# 方法一:rpm2cpio + cpio(標準做法)
rpm2cpio package.rpm | cpio -idmv
# -i extract, -d make directories, -m preserve mtime, -v verbose
# 方法二:midnight commander (mc) 視覺化瀏覽
mc package.rpm # 按 Enter 進入虛擬檔案系統複製檔案
# 方法三:alien 轉換為 deb/tgz 再解壓
alien -t package.rpm
tar -zxvf package.tgz
rpm --rebuilddb 重建 Berkeley DB。/var/lib/rpm/__db.* 殘留鎖檔。rpm -qpR package.rpm 查詢需求,逐一下載安裝。rpm -qfl package.rpm(需 4.13+ 版本)。rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-* 匯入公鑰。rpm 是底層利器,配合 yum/dnf 高層管理器可滿足從離線部署到自動化建置的完整需求。建議將 -qa、-ql、-qf、-V、rpm2cpio 列為肌肉記憶指令,關鍵時刻能秒級定位問題。