RPM包管理員(簡稱RPM,全稱爲The RPM Package Manager)是在Linux下廣泛使用的軟件包管理器。RPM此名詞可能是指.rpm的文件格式的軟件包,也可能是指其本身的軟件包管理器(RPM Package Manager)。最早由Red Hat研製,現在也由開源社區開發。RPM通常隨附於Linux發行版,但也有單獨將RPM作爲應用軟件發行的發行版(例如Gentoo)。RPM僅適用於安裝用RPM來打包的軟件,目前是GNU/Linux下軟件包資源最豐富的軟件包類型之一。——維基百科
Linux在桌面上的尷尬地位有一大部分原因是因爲娛樂軟件的缺乏和軟件安裝的難度大,今天我們就來說說Linux下軟件包管理的內容。
我覺得維基百科這次對RPM的解釋並不是太好,早先RPM叫做:Red hat Package Manager,後來因爲使用的人很多也很好用,被Linux Standard Base定義爲Linux的包管理器的標準才改名爲RPM Package Manager這種遞歸縮進的形式。在接觸Linux之前總覺得遊戲的安裝很神祕,能夠把那麼多的東西融合到一塊兒並受玩家控制,在接觸到Linux軟件包的安裝之後發現,它們也不過就是一些文件放在了特定的目錄下罷了。
我們先來認識一下RPM包名:
它是這樣的一種形式:
appname-VERSION-RELEASE.ARCH.rpm
VERSION:
major: 主版本號
minor: 次版本號
release: 發行號
RELEASE: 包自身的修訂號;有時候還會包含適用於的OS信息;
比如bash-4.3.2-2.centos6.x86_64.rpm中的2.centos6
ARCH: 適用的平臺
x86: i386, i486, i586, i686
x86_64: x86_64, amd64
powerpc: ppc
noarch: 跟平臺無關;
對RPM我們不打算做過多的講解,因爲在實際使用中yum(下一篇就是他)幾乎已經替代了RPM,其原因就是在安裝軟件包的時候會牽扯到依賴關係的問題,具體就是:你安裝A需要B或者B的庫,那麼你就得先裝B,但是B又需要C,更可惡的是可能C需要A。OMG,你會發現你掉到一個無底洞之中了。如圖:
圖中rpm -ivh 表示以詳細信息人類易讀的模式顯示安裝過程,卸載就是rpm -e,使用起來很簡單,就不再截圖了,下面詳細介紹一下rpm -q的使用方法(還是文本的形式):
查詢某包是否已經安裝,以及檢查安裝的所有包;還可以查看某包的詳細信息;
rpm {-q|--query} [select-options] [query-options]
[select-options]:
1、查詢某包或某些包是否安裝:
rpm -q PACKAGE_NAME...
2、查詢已經安裝的所有包:
rpm -qa
## [root@bogon Packages]# rpm -qa | wc -l --> 查看安裝了多少包
## [root@bogon Packages]# rpm -qa | grep 'yum*' --> 查找特定包
3、查詢某文件是由哪個包安裝生成:
rpm -qf /PATH/TO/SOMEFILE
4、查詢尚未安裝的包文件的相關信息
-p
# rpm -qpi PACKAGE_FILE
##[root@bogon Packages]# rpm -qpi ruby-1.8.7.374-2.el6.x86_64.rpm --> 查看沒裝的rpm包的信息,必須寫全包的名字
[query-options]:
1、查詢某包的簡要說明信息:
rpm -qi PACKAGE_NAME
## [root@bogon Packages]# rpm -qi yum --> 包的詳細信息
##Name : yum Relocations(能否更改安裝路徑): (not relocatable)
##Version : 3.2.29 Vendor(供應商): CentOS
##Release : 60.el6.centos Build Date(構建時間): Thu 16 Oct 2014 11:15:10 PM CST
##Install Date: Thu 26 Mar 2015 08:45:50 AM CST Build Host(在哪個主機上): c6b8.bsys.dev.centos.org
##Group : System Environment/Base Source RPM(源碼包): yum-3.2.29-60.el6.centos.src.rpm
##Size : 4776299 License(遵循的協議): GPLv2+
##Signature : RSA(簽名來源)/SHA1(完整性檢查), Sat 18 Oct 2014 03:53:51 AM CST, Key ID 0946fca2c105b9de
##Packager(創建包的人) : CentOS BuildSystem <http://bugs.centos.org>
##URL : http://yum.baseurl.org/
##Summary : RPM package installer/updater/manager
##Description :
##Yum is a utility that can check for and automatically download and
##install updated RPM packages. Dependencies are obtained and downloaded
##automatically, prompting the user for permission as necessary.
2、查詢某包安裝生成的文件列表:
rpm -ql PACKAGE_NAME
3、查詢某包安裝完成後生成的所有配置文件:
rpm -qc PACKAGE_NAME
## [root@bogon Packages]# rpm -qc yum --> 查詢軟件包的配置文件
4、查詢某包安裝完成後生成的所有幫助文件:
rpm -qd PACKAGE_NAME
5、查看某包製作時隨版本變化的changelog信息:
rpm -q --changelog PACKAGE_NAME
##[root@bogon Packages]# rpm -q --changelog yum --> 查看rpm包的更新日誌
6、查詢某包提供的capabilities:
rpm -q --provides PACKAGE_NAME
##[root@bogon Packages]# rpm -q --provides yum --> 查看rpm包提供的能力功能
7、查詢某包所依賴的capabilities:
rpm -q --requires PACKAGE_NAME
##[root@bogon Packages]# rpm -q --requires yum --> 查看rpm包所依賴的能力功能
8、查詢某包安裝或卸載時執行腳本:
rpm -q --scripts PACKAGE_NAME
腳本有四類:
preinstall: 安裝過程開始之前執行的腳本;
postinstall: 安裝過程完成之後執行的腳本;
preuninstall: 卸載開始之前執行的腳本 ;
postuninstall: 卸載過程完成之後執行的腳本;
##[root@bogon Packages]# rpm -q --scripts zsh --> 查看rpm包安裝或卸載時執行的腳步
##postinstall scriptlet (using /bin/sh): --> 安裝時運行的腳本
## if [ ! -f /etc/shells ] ; then
## echo "/bin/zsh" > /etc/shells
## else
## grep -q "^/bin/zsh$" /etc/shells || echo "/bin/zsh" >> /etc/shells
## fi
##
## if [ -f /usr/share/info/zsh.info.gz ]; then
## # This is needed so that --excludedocs works.
## /sbin/install-info /usr/share/info/zsh.info.gz /usr/share/info/dir \
## --entry="* zsh: (zsh). An enhanced bourne shell."
## fi
##
## :
##preuninstall scriptlet (using /bin/sh): --> 卸載前執行的腳本
## if [ "$1" = 0 ] ; then
## if [ -f /usr/share/info/zsh.info.gz ]; then
## # This is needed so that --excludedocs works.
## /sbin/install-info --delete /usr/share/info/zsh.info.gz /usr/share/info/dir \
## --entry="* zsh: (zsh). An enhanced bourne shell."
## fi
## fi
## :
##postuninstall scriptlet (using /bin/sh): --> 卸載後執行的腳本
## if [ "$1" = 0 ] ; then
## if [ -f /etc/shells ] ; then
## TmpFile=`/bin/mktemp /tmp/.zshrpmXXXXXX`
## grep -v '^/bin/zsh$' /etc/shells > $TmpFile
## cp -f $TmpFile /etc/shells
## rm -f $TmpFile
## fi
## fi
校驗:
查詢包安裝之後生成的文件是否發生了改變
rpm {-V|--verify} [select-options] [verify-options]
常見用法:rpm -V PACKAGE_NAME
S file Size differs
M Mode differs (includes permissions and file type)
5 digest (formerly MD5 sum) differs
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
##[root@bogon Packages]# rpm -V yum --> 查看包的配置文件是否改變
## S.5....T. c /etc/yum.conf --> .代表沒變,字母代表變了
## S file Size differs --> 文件大小
##M Mode differs (includes permissions and file type) --> 文件權限
##5 digest (formerly MD5 sum) differs --> 文件內容,特徵碼
## 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 --> 功能
程序包的合法性驗正:
來源合法:
由我們信任的製作者提供
依賴於:製作者的數字簽名;簽名是作者使用自己的私鑰加密程序包的特性碼進行的;
內容合法:
包未被二次修改;完整性校驗成功
依賴於:製作者提供的程序特徵碼;
驗正方式:安裝者用同樣的特徵碼提取算法提取程序包的特徵碼,並與原作者提供的相比較;
驗正其光盤中程序包的來源及完整性:
rpm --import /path/to/RPM-GPG-KEY-FILE
例如:# rpm --import RPM-GPG-KEY-CentOS-6
驗正:rpm {-K|--checksig} PACKAGE_FILE
--nosignature: 不檢查來源合法性
--nodigest: 不檢查完整性
##[root@bogon media]# rpm --import RPM-GPG-KEY-CentOS-6 --> 導入密碼文件
##[root@bogon Packages]# rpm -K yum-3.2.29-60.el6.centos.noarch.rpm --> 驗證rpm包是否合法
## yum-3.2.29-60.el6.centos.noarch.rpm: rsa sha1 (md5) pgp md5 OK
##[root@bogon Packages]# rpm -K --nosignature yum-3.2.29-60.el6.centos.noarch.rpm --> 不驗證簽名
## yum-3.2.29-60.el6.centos.noarch.rpm: sha1 md5 OK
##[root@bogon Packages]# rpm -K --nodigest yum-3.2.29-60.el6.centos.noarch.rpm --> 不驗證完整性
## yum-3.2.29-60.el6.centos.noarch.rpm: rsa (md5) pgp OK
rpm管理器數據庫:/var/lib/rpm
##/var/lib/rpm --> rpm管理器的數據庫,rpm所安裝的所有包的所有信息都在這裏存放
重建數據庫:
rpm {--initdb|--rebuilddb} [-v] [--dbpath DIRECTORY]
--initdb: 初始化數據庫,即數據庫完全不存時,可新建之;
--rebuilddb: 無論當前數據存在與否,都會直接重建此庫;
關於RPM其他的使用方法大家使用man命令查看吧,我們的重點是下一篇yum。
希望本文能夠幫助到您,如有錯誤敬請指正,拜謝!