RPM (Red Hat Package Manager) 是紅帽系 Linux 發行版(RHEL、CentOS、Fedora、Rocky Linux、AlmaLinux 等)的核心軟體封裝格式與管理工具。熟練掌握 rpm 指令,能讓系統管理員在無網路環境、需精確版本控制或排查依賴地獄時遊刃有餘。
rpm -ivh package-name.rpm
-i (install) 安裝-v (verbose) 顯示進度-h (hash) 以 # 號顯示安裝進度條| 錯誤訊息 | 原因 | 解決參數 | 風險提示 |
|---|---|---|---|
conflict with ... | 檔案衝突,欲安裝檔案覆蓋現有檔案 | --force | 可能覆蓋關鍵系統檔,謹慎使用 |
... is needed by ...... is not installed ... | 缺少依賴套件 | --nodeps | 忽略依賴可能導致軟體無法運行 |
組合核彈級指令:rpm -ivh --force --nodeps package.rpm(僅限測試環境或極特殊情況)。
.src.rpm 內含原始碼與 Spec 檔,安裝後需本地編譯產出二進位 RPM。
rpm -i your-package.src.rpm
cd /usr/src/redhat/SPECS
rpmbuild -bp your-package.spec # 僅做準備與修補,不編譯
cd /usr/src/redhat/BUILD/your-package/
./configure --prefix=/usr/local/your-package # 自訂參數
make
make install
rpm -i your-package.src.rpm
cd /usr/src/redhat/SPECS
rpmbuild -bb your-package.spec # 完整編譯並打包
# 產出檔案位於 /usr/src/redhat/RPMS/x86_64/ (或 i686, noarch)
rpm -ivh /usr/src/redhat/RPMS/x86_64/new-package.rpm
優勢:產出標準 RPM,可跨機器分發、納入私有 YUM/DNF 倉庫、支援升級與移除。
rpm -e package-name
.rpm 尾綴**,可包含版本號:proftpd-1.2.8-1、proftpd 均可。... is needed by ...,表示有其他套件相依,強制移除用 rpm -e --nodeps package-name(極不建議)。利用 rpm2cpio 將 RPM 轉為 cpio 串流,再用 cpio 解包:
# 僅查看檔案清單
rpm2cpio package.rpm | cpio -tv
# 解包至目前目錄(保留原路徑結構、保留修改時間)
rpm2cpio package.rpm | cpio -idmv
-i / --extract:解包-d / --make-directories:建立目錄-m:保留檔案修改時間-v:顯示進度所有查詢以 rpm -q 開頭,組合選項極具彈性:
| 任務 | 指令範例 | 說明 |
|---|---|---|
| 列出所有已安裝套件 | rpm -qa | 搭配 grep 篩選:rpm -qa | grep sql |
| 查詢已安裝套件完整名稱 | rpm -q mysql | 輸出如 mysql-3.23.54a-11 |
| 列出已安裝套件的所有檔案 | rpm -ql mysql | 不加 .rpm 尾綴 |
| 查詢未安裝 RPM 檔包含的檔案 | rpm -qlp package.rpm | -p 指定套件檔 |
| 查看已安裝套件詳細資訊 | rpm -qi mysql | 版本、描述、建置日期、安裝大小等 |
| 查看未安裝 RPM 詳細資訊 | rpm -qip package.rpm | |
| 反查:某指令/檔案屬於哪個套件 | rpm -qf $(which mysql) | 反引號 ` ` 或 $() 取得完整路徑 |
| 綜合查詢:資訊+檔案清單 | rpm -qilf $(which mysql) | -i + -l + -f |
選項速查卡:q=query、a=all、i=info、l=list、f=file、p=package file。
RPM = Red Hat Package Manager。解決軟體依賴地獄、版本管理、安裝/升級/移除自動化的標準化方案。
否。Debian/Ubuntu 用 deb + apt/dpkg;Arch 用 pacman;openSUSE 雖用 RPM 但工具鏈為 zypper。RPM 為開放標準,理論上可移植至任何 Linux。
檔名編碼關鍵元數據:name-version-release.dist.arch.rpm
mypackage-1.1-2.el9.x86_64.rpm
# 名稱-版本-釋出號.發行版.架構.rpm
x86_64 / amd64:64 位元 Intel/AMD(現代標準)i686:32 位元 x86(Pentium Pro 以上優化)noarch:架構無關(腳本、文件、Java 等)aarch64 / arm64:ARM 64 位元原則:向下相容,向上不相容。x86_64 系統可裝 i686(需多庫支援),i686 系統不可裝 x86_64。
rpmbuild --rebuild),因在目標環境原生編譯。rpm -ivh ftp://server/path/pkg.rpmrpm -V package(比對檔案大小、MD5、權限、擁有者、類型)rpm --checksig package.rpmrpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-releaserpm --rebuilddb(解決 RPM 資料庫損毀)rpm 是底層利器,適合離線環境、精確版本控制、檔案級除錯。日常運維建議搭配 dnf/yum 解決依賴,留 rpm 處理特殊場景。掌握「查詢 (-q)」、「驗證 (-V)」、「提取 (rpm2cpio)」三大核心技能,將大幅提升 Linux 系統故障排查效率。