一、什麼是RPM
RPM的全名爲"RedHat Package Manager",是有RedHat公司研發程序包管理器。在CentOS系統上RPM命令管理程序包常用的功能有:安裝、升級、卸載、查詢和校驗、數據庫維護。
二、RPM常用的功能詳解
1.RPM安裝(install)
命令格式:rpm {-i|--install} [install-options] PACKAGE_FILE ...
通常我們會這樣執行安裝命令:
[root@localhost ~]# rpm -ivh zsh-5.0.2-7.el7.x86_64.rpm
# 爲當前系統安裝zsh;
[install-options]:
-i:install
-v:顯示詳細的安裝信息
-h:hash marks輸出進度條;每個#表示2%的進度;
--test:測試安裝,檢查並報告依賴關係及衝突消息等;
例如:測試安裝tomcat包是否與其他程序包有依賴關係
--nodeps:忽略依賴關係,此操作有風險;
例如:忽略依賴關係,強行安裝tomcat。
注意:tomcat已經被安裝,但是由於忽略了依賴關係,此程序很有可能不能使用;
--replacepkgs:重新安裝該程序包;
例如:忽略依賴關係,重新安裝tomcat。
--nosignature:不檢查包簽名信息,不檢查來源合法性;
例如:不校驗zsh的簽名信息,直接安裝;
--nodigest:不檢查包完整性信息;
例如:不檢查zsh-5.0.2-7.el7.x86_64.rpm包的完整性,安裝zsh。
2.RPM升級(fresh&update)
rpm -U [install-options] PACKAGE_FILE ...
rpm -F [install-options] PACKAGE_FILE ...
-Uvh:後面接的軟件包被安裝過,會自動安裝,安裝過,則進行升級;
-Fvh:後面接的軟件包安裝過則進行升級,未安裝,則該軟件不會被安裝(升級);
常用選項:
--oldpackage:降級;
--force:強制升級;
注意:
(1) 不要對內核做升級操作;Linux支持多內核版本並存,因此,直接安裝新版本內核;
(2) 如果某原程序包的配置文件安裝後曾被修改過,升級時,新版本的程序提供的同一個 配置文件不會覆蓋原有版本的配置文件,而是把新版本的配置文件重命名。
3.RPM卸載(erase)
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--test] PACKAGE_NAME ...
常用選項:
--allmatches:卸載所有匹配指定名稱的程序包的各版本;
--nodeps:忽略依賴關係
--test:測試卸載並不會正真的卸載程序包;
注意:
(1) 通常文件的卸載操作用rpm -e PACKAGE_NAME就可以完成;
(2) 卸載的時候只需要給出包名,安裝與升級的時候給出文件路徑和包名。
4.查詢(query)
rpm {-q|--query} [select-options] [query-options]
[select-options]
PACKAGE_NAME:查詢指定的程序包是否已經安裝,及其版本;
-a, --all:查詢所有已經安裝過的包;
例如:查詢當前系統上已經安裝的程序包。 #由於安裝的包太多,這裏顯示10行
-f FILE:查詢指定的文件由哪個程序包安裝生成;
例如:查詢/etc/issue文件是由哪個安裝包生成的文件。
-p, --package PACKAGE_FILE:用於實現對未安裝的程序包執行查詢操作;
例如: 查詢
--whatprovides CAPABILITY:查詢指定的CAPABILITY由哪個程序包提供;
例如:查詢bash是由哪個程序包提供的就可以使用如下命令:
--whatrequires CAPABILITY:查詢指定的CAPABILITY被哪個包所依賴;
例如:查詢bash被哪些程序包所依賴。
[query-options]
--changelog:查詢bash的changlog;
例如 : [root@localhost ~]# rpm -q --changelog bash #查詢bash的歷史日誌
文件信息很多,這裏就不顯示了;
-l, --list:程序安裝生成的所有文件列表;
例如:查詢安裝bash生成的文件。 #由於文件篇幅很大,這裏只截取部分。
-i, --info:程序包相關的信息,版本號、大小、所屬的包組,等;
例如:查詢bash的相關信息
-c, --configfiles:查詢指定的程序包提供的配置文件;
例如:查詢zsh的配置文件,顯示如下信息:
-d, --docfiles:查詢指定的程序包提供的文檔;
例如:查詢bash提供的文檔,顯示如下,大家可以看到有很多類型的文檔:
--provides:列出指定的程序包提供的所有的CAPABILITY;
例如:列出zsh提供的所有的CAPABILITY;
-R, --requires:查詢指定的程序包的依賴關係;
例如:查詢tomcat 包被被哪些程序包依賴:
--scripts:查看程序包自帶的腳本片斷;
例如:查詢tomcat安裝時用到的腳本。
5.校驗(verify)
rpm {-V|--verify} [select-options] [verify-options]
S file Size differs # 校驗文件大小
M Mode differs (includes permissions and file type) # 校驗文件權限
5 digest (formerly MD5 sum) differs # MD5碼校驗
D Device major/minor number mismatch # 校驗文件主、次設備號
L readLink(2) path mismatch
U User ownership differs # 校驗文件屬主
G Group ownership differs # 校驗文件屬組
T mTime differs # 文件時間戳的校驗
P caPabilities differ # 文件capability的校驗
●Linux安裝程序包來源合法性驗正和完整性驗正
獲取並導入信任的包製作者的密鑰:
對於CentOS發行版來說:rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
驗正:
(1) 安裝此組織簽名的程序時,會自動執行驗正;
(2) 手動驗正:rpm -K PACKAGE_FILE
6.數據庫維護
數據庫重建:
rpm管理器數據庫路徑:/var/lib/rpm/
查詢操作:通過此處的數據庫進行。
獲取幫助:
CentOS 6:man rpm
CentOS 7:man rpmdb
rpm {--initdb|--rebuilddb} [--dbpath DIRECTORY] [--root DIRECTORY]
--initdb:初始化數據庫,當前無任何數據庫可初始化創建一個新的;
當前有時不執行任何操作;
--rebuilddb:重新構建,通過讀取當前系統上所有已經安裝過的程序包進行重新創建。