RPM
Red Hat開發的一種程序包管理器Red Hat Package Manager的縮寫,因其簡便易用,現已成爲公認的行業標準,演變爲RPM Package Manager的遞歸縮寫;有特定的格式【1】;能夠實現對兼容格式的程序包進行管理【2】:安裝、卸載、升級、查詢、校驗等。
【1】RPM包的命名格式
appname-VERSION-RELEASE.ARCH.rpm
示例:bash-4.3.2-2.centos6.x86_64.rpm
VERSION:
major: 主版本號,上例中的4.3.2中的4
minor: 次版本號,上例中的4.3.2中的3
release: 發行號,上例中的4.3.2中的2
RELEASE: 包自身的修訂號;有時候還會包含適用於的OS信息;上例中的2.centos6(第2次發行,適用於centos6)
ARCH: 適用的平臺,上例中的x86_64
常見平臺:
x86: i386, i486, i586, i686
x86_64:x86_64, amd64
powerpc:ppc
noarch:跟平臺無關
程序包的獲取途徑
1、系統的發行光盤鏡像或官方站點(或站點鏡像服務器)
掛載光盤:
注意:光盤下的程序包存儲於 Packages 目錄下
官方站點,鏡像:
mirrors.sohu.com
mirrors.163.com
mirrors.aliyun.com
2、程序包的官方站點
3、第三方組織:epel
示例:教室:http://172.16.0.1/fedora-epel/6/
4、搜索引擎
http://rpm.pbone.net
http://pkgs.org
建議:安裝之前要驗證程序包的合法性(包括來源合法性及程序包的完整性),驗證方法後文會提及。
【2】RPM程序包管理
安裝
rpm {-i|--install} [install-options] PACKAGE_FILE1...
-v:顯示安裝過程的詳細信息;
-vv,-vvvh:通過增加v的次數來加深顯示的詳細程度;
-h:hash,以#來顯示安裝進度(1個#表示2%的進度);
安裝時的常用組合:-ivh
--test:測試安裝,不執行真正的安裝過程,僅報告依賴關係及衝突信息等;
注意:要安裝的程序包前一定要跟上絕對路徑或相對路徑
--nodeps:忽略依賴關係;
副作用:能成功安裝,但未必能成功運行;
程序包之間存在依賴關係(如下圖所示)
由衆多目的單一的小程序組成,結果程序之間存在相關性;
--replacepkgs:覆蓋安裝,重新安裝並覆蓋原有的文件;
--force:強制安裝;
--relocate:重新指定程序包的安裝路徑(前提是程序包支持指定路徑);
--oldpackage:降級到老版本;
升級
rpm {-U|--upgrade} [install-options] PACKAGE_FILE ...
-U:升級或安裝 ,即要升級的老版本若不存就直接安裝新版本程序包
rpm {-F|--freshen} [install-options] PACKAGE_FILE ...
-F:升級,即要升級的老版本若不存在就不會升級
可用選項同安裝選項
注意:一定不要對內核執行升級操作;Linux允許多內核共存,所以可以直接安裝多個不同版本的內核;
注意:如果程序包的配置文件安裝後曾被修改,升級時,新版本的配置文件不會覆蓋老版本的配置文件,而是把新版本的配置文件重命名(加後綴.rpmnew)後保存;
卸載
rpm {-e|--erase} [--allmatches] [--nodeps] [--test] PACKAGE_NAME ...
簡單用法:rpm -e PACKAGE_NAME...
--nodeps:忽略依賴關係;
--test:測試卸載;dry-run模式;
--allmatches: 如果一個程序包同時安裝多個版本,則此選項一次全部卸載之;
注意:如果程序包的配置文件安裝後曾被修改,卸載時,此文件通常不會被刪除,而是被重命名(加後綴.rpmsave)後留存;
查詢
查詢某包是否已經安裝,查看安裝的所有包,以及查看某包的詳細信息
-rpm {-q|--query} [select-options] [query-options]
[select-options]:
1、查詢某包或某些包是否安裝:
rpm -q PACKAGE_NAME
2、查詢已安裝的所有包:
rpm -qa
3、查詢某文件是由哪個包安裝生成:
rpm -qf /PATH/TO/SOMEFILE
4、查詢尚未安裝的包文件的相關信息:
下邊命令選項中間加p
例如:rpm -qpi PACKAGE_FILE1...
[query-options]:
1、查詢某包的簡要說明信息:
rpm -qi PACKAGE_NAME(安裝包名)
2、查詢某安裝包安裝生成的文件列表:
rpm -ql PACKAGE_NAME
3、查詢某包安裝後生成的所有配置文件:
rpm -qc PACKAGE_NAME
4、查詢某包安裝完成後生成的所有幫助文件:
rpm -qd PACKAGE_NAME
5、查看某包製作時隨版本變化的changelog信息:
rpm -q --changelog PACKAGE_NAME
6、查詢某包提供的功用capabilities:
rpm -q --provides PACKAGE_NAME
7、查詢某包依賴的功用capabilities:
rpm -q --requires PACKAGE_NAME
8、查詢某包安裝、卸載時執行的腳本:
rpm -q --scripts PACKAGE_NAME
腳本有四類:
preinstall: 安裝過程開始之前執行的腳本;
postinstall: 安裝過程完成之後執行的腳本;
preuninstall: 卸載開始之前執行的腳本 ;
postuninstall: 卸載過程完成之後執行的腳本;
注意:安裝和升級時需跟帶完整路徑的安裝包名,卸載和查詢時只需跟安裝包名即可
校驗
查詢包安裝之後生成的文件是否發生過改變
rpm {-V|--verify} [select-options] [verify-options]
簡單用法: rpm -V PACKAGE_NAME
程序包的合法性驗證
來源合法:
由我們信任的製作者提供;
依賴於:製作者的數字簽名;簽名是作者使用自己的私鑰加密程序包的特徵碼生成的;
內容合法:
包未被二次修改,完整性驗證成功;
依賴於:製作者提供的程序特徵碼;
驗證方式:安裝者用同樣的特徵碼提取方法提取程序包的特徵碼,並與原作者提供的相比較;
驗證光盤中程序包的來源及完整性:
導入:rpm --import /path/to/RPM-GPG-KEY-FILE
驗證:rpm {-K|--checksig} PACKAGE_FILE
--nosignature: 不檢查來源合法性
--nodigest: 不檢查完整性
rpm管理器數據庫
/var/lib/rpm
重建數據庫:
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]
默認重建在 /var/lib/rpm,只有需重新指定重建目錄時才需跟此選項
--initdb:初始化數據庫,即數據庫完全不存在時,可新建之;
--rebuliddb:無論當前數據庫存在與否,都會直接重建之;