Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

RPM 套件管理完全指南:安裝、升級、查詢與除錯實戰

編輯:Linux 教學

RPM (Red Hat Package Manager) 是紅帽系 Linux 發行版(RHEL、CentOS、Fedora、Rocky Linux、AlmaLinux 等)的核心軟體封裝格式與管理工具。熟練掌握 rpm 指令,能讓系統管理員在無網路環境、需精確版本控制或排查依賴地獄時遊刃有餘。

一、 基礎安裝與常見問題處理

1.1 標準安裝

rpm -ivh package-name.rpm
  • -i (install) 安裝
  • -v (verbose) 顯示進度
  • -h (hash) 以 # 號顯示安裝進度條

1.2 常見衝突與解決方案

錯誤訊息原因解決參數風險提示
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(推薦,利於部署與版本管理)

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:顯示進度

五、 強大的查詢系統 (-q 查詢模組)

所有查詢以 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 核心知識補充

1. RPM 是什麼?

RPM = Red Hat Package Manager。解決軟體依賴地獄、版本管理、安裝/升級/移除自動化的標準化方案。

2. 所有 Linux 都用 RPM 嗎?

否。Debian/Ubuntu 用 deb + apt/dpkg;Arch 用 pacman;openSUSE 雖用 RPM 但工具鏈為 zypper。RPM 為開放標準,理論上可移植至任何 Linux。

3. 為何 RPM 檔名如此冗長?

檔名編碼關鍵元數據:name-version-release.dist.arch.rpm

mypackage-1.1-2.el9.x86_64.rpm
# 名稱-版本-釋出號.發行版.架構.rpm

4. 架構代碼對照

  • x86_64 / amd64:64 位元 Intel/AMD(現代標準)
  • i686:32 位元 x86(Pentium Pro 以上優化)
  • noarch:架構無關(腳本、文件、Java 等)
  • aarch64 / arm64:ARM 64 位元

原則:向下相容,向上不相容。x86_64 系統可裝 i686(需多庫支援),i686 系統不可裝 x86_64。

5. 不同發行版 RPM 能混用嗎?

  • 二進位 RPM:通常**不能**跨發行版混用(glibc、systemd、內核 ABI 差異)。
  • 原始碼 RPM:通常**可以**跨發行版重建(rpmbuild --rebuild),因在目標環境原生編譯。

6. 進階技巧與除錯

  • 透過 FTP/HTTP 直接安裝:rpm -ivh ftp://server/path/pkg.rpm
  • 驗證套件完整性:rpm -V package(比對檔案大小、MD5、權限、擁有者、類型)
  • 查詢套件簽名:rpm --checksig package.rpm
  • 匯入 GPG 金鑰:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
  • 資料庫重建:rpm --rebuilddb(解決 RPM 資料庫損毀)

總結

rpm 是底層利器,適合離線環境、精確版本控制、檔案級除錯。日常運維建議搭配 dnf/yum 解決依賴,留 rpm 處理特殊場景。掌握「查詢 (-q)」、「驗證 (-V)」、「提取 (rpm2cpio)」三大核心技能,將大幅提升 Linux 系統故障排查效率。

Copyright © Windows教程網 All Rights Reserved