用法: rpm [選項...]
查詢(xún)選項 (參數 -q 或 --query):
-c, --configfiles 列出所有配置文件
-d, --docfiles 列出所有文檔文件
--dump 導出基本文件信息
-l, --list 列出包內的所有文件
--queryformat=QUERYFORMAT 使用緊跟的查詢(xún)格式
-s, --state 顯示文件列表的狀態(tài)
-v, --verbose 顯示詳細的文件列表
-a, --all 查詢(xún)/校驗所有包
-f, --file 查詢(xún)/校驗包的包含文件
-g, --group 查詢(xún)/校驗組內的包
-p, --package 查詢(xún)/校驗一個(gè)包文件(例如一個(gè)二進(jìn)制的 *.rpm 文件)
--querytags 顯示已知的查詢(xún)標簽
--specfile 查詢(xún)規格文件
--whatrequires 查詢(xún)/校驗指定包的依賴(lài)關(guān)系
--whatprovides 查詢(xún)/校驗指定包的被依賴(lài)關(guān)系
校驗選項 (參數 -V 或 --verify):
--nomd5[|=0x1] 不使用MD5分類(lèi)校驗文件
--nofiles[|=0x10000] 不校驗包中的文件
--nodeps[|=0x20000] 不校驗包的依賴(lài)關(guān)系
--noscript[|=0x40000] 不執行校驗腳本(任何腳本)
-a, --all 查詢(xún)/校驗所有包
-f, --file 查詢(xún)/校驗包所含的文件
-g, --group 查詢(xún)/校驗組內的包
-p, --package 查詢(xún)/校驗一個(gè)包文件(例如一個(gè)二進(jìn)制的 *.rpm 文件)
--querytags 顯示已知的查詢(xún)標簽
--specfile 查詢(xún)規格文件
--whatrequires 查詢(xún)/校驗指定包的依賴(lài)關(guān)系
--whatprovides 查詢(xún)/校驗指定包的被依賴(lài)關(guān)系
簽名選項:
--addsign 往包內增加一個(gè)簽名
--resign 簽名一個(gè)包(去除當前簽名)
-K, --checksig 校驗包的簽名
--nogpg[&=~0x4] 忽略任何GPG的簽名
--nomd5[&=~0x2] 不校驗文件的MD5的校驗數
數據庫選項:
--initdb 初始化數據庫
--rebuilddb 從已安裝包的頭信息中重建數據庫的反轉列表
安裝/升級/卸載選項:
--allfiles[|=0x40] 安裝所有文件, 忽略找不到的配置項里面的部分
--allmatches[|=0x2] 卸載所有和
--badreloc[|=0x8] 在非重定位包中重定位文件
-e, --erase=
--excludedocs[|=0x20] 不安裝文檔
--excludepath=
--force[|=0x74] --replacepkgs --replacefiles的快捷方式
-F, --freshen=
-h, --hash[|=0x2] 為安裝包打上哈希標記(最好帶-v選項)
--ignorearch[|=0x2] 不校驗包的體系
--ignoreos[|=0x1] 不校驗包的操作系統
--ignoresize[|=0x180] 安裝之前不檢查磁盤(pán)空間
--includedocs 安裝文檔
--install=
--justdb[|=0x8] 升級數據庫,但是不修改文件系統
--nodeps 不校驗包的依賴(lài)關(guān)系
--noorder[|=0x8] 不重新記錄包的安裝信息到依賴(lài)性中
--noscripts[|=0xff0000] 不執行包的腳本
--notriggers[|=0x990000] 不執行被該安裝包觸發(fā)的任何腳本
--oldpackage[|=0x40] 升級到該包的一個(gè)舊版本
(--force 升級的時(shí)候,該操作自動(dòng)執行)
--percent[|=0x1] 打印包的安裝進(jìn)度
--prefix= 如果允許重定位,則重定位包到
--relocate=
--repackage[|=0x400] 重新打包保存下來(lái)的卸載包的文件
--replacefiles[|=0x30] 安裝時(shí)用包文件替換已安裝文件
--replacepkgs[|=0x4] 如果包已經(jīng)存在,那么重新安裝
--test[|=0x1] 不安裝包,但是要檢測能否正常運行
-U, --upgrade=
所有rpm模式的通用選項:
--version 打印所使用的rpm的版本信息
--quiet 提供少量詳細信息輸出
-v, --verbose 提供更多的詳細信息輸出
--define=‘
--eval=
-r, --root= 使用作為頂層目錄(默認: "/")
--macros=<...> 讀入<...>來(lái)代替默認的宏文件
--rcfile=<...> 讀入<...>來(lái)代替默認的rpmrc文件
--showrc 顯示最終的rpmrc和macro配置
通過(guò)popt alias/exec 實(shí)現的選項:
--scripts 列出包中的所有安裝/卸載腳本
--setperms 在包中設置文件的權限
--setugids 在包中設置文件的用戶(hù)/組關(guān)系
--conflicts 列出此包的兼容性
--obsoletes 列出安裝此包需要卸載的別的包
--provides 列出此包提供的兼容性
--requires 列出此包所需要的兼容性
--info 列出包中的敘述信息
--changelog 列出該包的變更日志
--triggers 列出包中的觸發(fā)腳本
--last 根據安裝時(shí)間列出包,最近時(shí)間的優(yōu)先
--filesbypkg 列出每個(gè)包的所有文件
--redhatprovides 根據所包含的提供的兼容性查找包名(需要安裝包rpmdb-redhat)
--redhatrequires 根據所依賴(lài)的包的兼容性查找包名(需要安裝包rpmdb-redhat)
--buildpolicy=
--with=
幫助選項:
-?, --help 顯示該幫助信息
--usage 顯示用法摘要
******************************************************
1.如何不安裝但是獲取rpm包中的文件
使用工具rpm2cpio和cpio
rpm2cpio xxx.rpm | cpio -vi
rpm2cpio xxx.rpm | cpio -idmv
rpm2cpio xxx.rpm | cpio --extract --make-directories
參數i和extract相同,表示提取文件。v表示指示執行進(jìn)程
d和make-directory相同,表示根據包中文件原來(lái)的路徑建立目錄
m表示保持文件的更新時(shí)間。
2.如何查看與rpm包相關(guān)的文件和其他信息
下面所有的例子都假設使用軟件包mysql-3.23.54a-11
1.我的系統中安裝了那些rpm軟件包
rpm -qa 講列出所有安裝過(guò)的包
如果要查找所有安裝過(guò)的包含某個(gè)字符串sql的軟件包
rpm -qa |grep sql
3.如何獲得某個(gè)軟件包的文件全名
rpm -q mysql 可以獲得系統中安裝的mysql軟件包全名,從中可以獲得
當前軟件包的版本等信息。這個(gè)例子中可以得到信息mysql-3.23.54a-11
4.一個(gè)rpm包中的文件安裝到那里去了?
rpm -ql 包名
注意這里的是不包括.rpm后綴的軟件包的名稱(chēng)
也就是說(shuō)只能用mysql或者mysql-3.23.54a-11而不是mysql-3.23.54a-11.rpm。
如果只是想知道可執行程序放到那里去了,也可以用which,比如
which mysql
5.一個(gè)rpm包中包含那些文件
一個(gè)沒(méi)有安裝過(guò)的軟件包,使用rpm -qlp ****.rpm
一個(gè)已經(jīng)安裝過(guò)的軟件包,還可以使用rpm -ql ****.rpm
6.如何獲取關(guān)于一個(gè)軟件包的版本,用途等相關(guān)信息?
一個(gè)沒(méi)有安裝過(guò)的軟件包,使用rpm -qip ****.rpm
一個(gè)已經(jīng)安裝過(guò)的軟件包,還可以使用rpm -qi ****.rpm
6.某個(gè)程序是哪個(gè)軟件包安裝的,或者哪個(gè)軟件包包含這個(gè)程序
rpm -qf `which 程序名` 返回軟件包的全名
rpm -qif `which 程序名` 返回軟件包的有關(guān)信息
rpm -qlf `which 程序名` 返回軟件包的文件列表
注意,這里不是引號,而是`,就是鍵盤(pán)左上角的那個(gè)鍵。
也可以使用rpm -qilf,同時(shí)輸出軟件包信息和文件列表
7.某個(gè)文件是哪個(gè)軟件包安裝的,或者哪個(gè)軟件包包含這個(gè)文件
注意,前一個(gè)問(wèn)題中的方法,只適用與可執行的程序,而下面的方法,不僅可以
用于可執行程序,也可以用于普通的任何文件。前提是知道這個(gè)文件名。
首先獲得這個(gè)程序的完整路徑,可以用whereis或者which,然后使用rpm -qf例如:
# whereis ftptop
ftptop: /usr/bin/ftptop /usr/share/man/man1/ftptop.1.gz
# rpm -qf /usr/bin/ftptop
proftpd-1.2.8-1
# rpm -qf /usr/share/doc/proftpd-1.2.8/rfc/rfc0959.txt
proftpd-1.2.8-1
總結:
獲得軟件包相關(guān)的信息用rpm -q,q表示查詢(xún)query,后面可以跟其他選項,比如
i 表示info,獲得軟件包的信息;
l 表示list,獲得文件列表;
a 表示all,在所有包中執行查詢(xún);
f 表示file,根據文件進(jìn)行相關(guān)的查詢(xún);
p 表示package,根據軟件包進(jìn)行查詢(xún)
需要的查詢(xún)條件可以使用grep產(chǎn)生,或者從"` `"中的命令行產(chǎn)生
7.關(guān)于rpm軟件包的一些相關(guān)知識
1.什么是rpm
rpm 即RedHat Package Management,是RedHat的發(fā)明之一
8.為什么需要rpm
在一個(gè)操作系統下,需要安裝實(shí)現各種功能的軟件包。這些軟件包一般都有各自的
程序,但是同時(shí)也有錯綜復雜的依賴(lài)關(guān)系。同時(shí)還需要解決軟件包的版本,以及安裝,
配置,卸載的自動(dòng)化問(wèn)題。為了解決這些問(wèn)題,RedHat針對自己的系統提出了一個(gè)
較好的辦法來(lái)管理成千上百的軟件。這就是RPM管理系統。在系統中安裝了rpm管理系統
以后,只要是符合rpm文件標準的打包的程序都可以方便的安裝,升級,卸載
9.是不是所有的linux都使用rpm
任何系統都需要包管理系統,因此很多linux都使用rpm系統。但rpm系統是為RH專(zhuān)門(mén)
但是TL,Mandrake等系統也都使用rpm。由于rpm的源程序可以在別的系統上進(jìn)行編譯,
所以有可能在別的系統上也使用rpm
除了rpm,其他一些系統也有自己的軟件包管理程序,例如debian的deb包,
slakware也都有自己的包管理系統
10.rpm包的文件名為什么那么長(cháng)
rpm包的文件名中包含了這個(gè)軟件包的版本信息,操作系統信息,硬件要求等等。
比如mypackage-1.1-2TL.i386.rpm,其中mypackage是在系統中登記的軟件包的名字
1.1是軟件的版本號,2是發(fā)行號,TL表示用于TL操作系統,還可能是RH等。i386表示
用于intel x86平臺,還可能是sparc等。
11.軟件包文件名中的i386,i686是什么意思
rpm軟件包的文件名中,不僅包含了軟件名稱(chēng),版本信息,還包括了適用的硬件架構
的信息。
i386指這個(gè)軟件包適用于intel 80386以上的x86架構的計算機(AI32)
i686指這個(gè)軟件包適用于intel 80686以上(奔騰pro以上)的x86架構的計算機(IA32)
noarch指這個(gè)軟件包于硬件架構無(wú)關(guān),可以通用。
i686軟件包的程序通常針對CPU進(jìn)行了優(yōu)化,所以,向后兼容比較用以,i386的包在
x86機器上都可以用。向前一般不兼容。不過(guò)現在的計算機,奔騰pro以下的CPU已經(jīng)很少
用,通常配置的機器都可以使用i686軟件包
12.不同操作系統發(fā)行的rpm包可否混用?
對于已經(jīng)編譯成二進(jìn)制的rpm包,由于操作系統環(huán)境不同,一般不能混用。
對于以src.rpm發(fā)行的軟件包,由于需要安裝時(shí)進(jìn)行本地編譯,所以通??梢栽诓煌?
系統下安裝。
13.使用rpm時(shí)遇到的一些特殊問(wèn)題
Q 我用rpm -e **.rpm無(wú)法刪除rpm包
A 包名不要包括rpm,
rpm -e 包名,可以包含版本號等信息,但是不可以有后綴.rpm
Q 在MS的系統下有沒(méi)有讀RPM文件的工具?
A wincmd with rpm plugins.....
Q 是否可以通過(guò)ftp安裝安裝升級rpm包?
A 可以。rpm -ivh ftp://xxxxxxxx/PATH2SomeRPM
Q rpm安裝時(shí)已有的包版本過(guò)高怎么辦?
A 有時(shí)由于安裝的軟件包太老,而系統中相關(guān)的軟件包版本比較新,所以可能需要
安裝的包依賴(lài)的一些文件會(huì )找不到。這時(shí)有兩種解決辦法,
第一是在系統文件中找到和需要的文件功能相同或相似的文件,做一個(gè)符號鏈接到
需要的目錄下。
第二是下載安裝新版本的軟件包。
******************************************************
從一般意義上說(shuō),軟件包的安裝其實(shí)是文件的拷貝,RPM安裝軟件包,也無(wú)外乎此。但RPM要更進(jìn)一步、更聰明一些就需要多做些工作了。
聰明的安裝
從一般意義上說(shuō),軟件包的安裝其實(shí)是文件的拷貝,即把軟件所用的各個(gè)文件拷貝到特定目錄。RPM安裝軟件包,無(wú)外乎此。但RPM要更進(jìn)一步,更聰明一些。在安裝前,它通常要執行以下操作:
1.檢查軟件包的依賴(lài)(Dependency)
RPM格式的軟件包中可包含有依賴(lài)關(guān)系的描述,如軟件執行時(shí)需要什么動(dòng)態(tài)鏈接庫,需要什么程序存在及版本號要求等。當RPM檢查時(shí)發(fā)現所依賴(lài)的鏈接庫或程序等不存在或不符合要求時(shí),默認的做法是中止軟件包安裝。
2.檢查軟件包的沖突(Conflicts)
有的軟件與某些軟件不能共存,軟件包制作者會(huì )將這種沖突記錄到RPM軟件包中。安裝時(shí),若RPM發(fā)現有沖突存在,將會(huì )中止安裝。
3.執行安裝前腳本程序(Preinstall)
此類(lèi)程序由軟件包制作者設定,需要在安裝前執行。通常是檢測操作環(huán)境,建立有關(guān)目錄,清理多余文件等等,為順利安裝作準備。
4.處理配置文件(Configfiles)
RPM對配置文件(Configfiles)有著(zhù)特別的處理。因為用戶(hù)常常需要根據實(shí)際情況,對軟件的配置文件做相應的修改。如果安裝時(shí)簡(jiǎn)單地覆蓋了此類(lèi)文件,則用戶(hù)又得重新手工設置,很麻煩。這種情況下,RPM做得比較明智:它將原配置文件換個(gè)名字保存了起來(lái)(原文件名后綴加上.rpmorig),用戶(hù)可根據需要再恢復,避免重新設置的尷尬。
5.解壓軟件包并存放到相應位置
這是最重要的部分,也是軟件包安裝的關(guān)鍵所在。在這一步,RPM將軟件包解壓縮,將其中的文件一個(gè)個(gè)存放到正確的位置,同時(shí),文件的操作權限等屬性相應設置正確。
6.執行安裝后腳本程序(Postinstall)
此類(lèi)程序為軟件的正確執行設定相關(guān)資源,如修改inetd.conf、運行ldconfig程序以利新的動(dòng)態(tài)鏈接庫生效等等。
7.更新RPM數據庫
安裝后,RPM將所安裝的軟件及相關(guān)信息記錄到其數據庫中,便于以后升級、查詢(xún)、校驗和卸載。
8.執行安裝時(shí)觸發(fā)腳本程序(Triggerin)
觸發(fā)腳本程序是指軟件包滿(mǎn)足某種條件(如已安裝軟件包sendmail,或file版本大于3.0)時(shí)才觸發(fā)執行的腳本程序,它用于軟件包之間的交互控制。觸發(fā)腳本程序有三類(lèi):一是軟件包安裝時(shí)才觸發(fā)的,稱(chēng)為安裝時(shí)觸發(fā)腳本程序(triggerin);二是軟件包卸載前觸發(fā)的,叫作卸載前觸發(fā)腳本程序(triggerun);三是軟件包卸載后才觸發(fā)執行的,稱(chēng)作卸載后觸發(fā)腳本程序(triggerpostun)。這些觸發(fā)腳本程序,大大擴展了RPM軟件包管理的功能。
命令格式
安裝RPM格式的軟件包,可使用如下命令格式:
rpm -i [安裝選項1 安裝選項2…] 包裹文件1 包裹文件2…
注:可用–install代替-i,效果相同。
選項列表

1.典型的命名樣式(常用):
格式為:軟件名-版本號-釋出號.體系號.rpm
注:體系號指的是執行程序適用的處理器體系,如i386體系,sparc體系等。體系號為src時(shí)表明為源代碼包,否則為執行程序包。
如abc-3.2-1.i386.rpm為執行程序包,軟件名為abc,版本號為3.2,釋出號為1,適用體系為i386,而abc-3.2-1.src.rpm則為源代碼包。
2.URL形式的命名樣式(較常用):
* FTP方式的命名格式:ftp://[用戶(hù)名[:密碼]@]主機[:端口]/包裹文件
注:[]括住的內容表示可選。主機可以是主機名,也可是IP地址。包裹文件可含目錄信息。如未指定用戶(hù)名,則RPM采用匿名方式傳輸數據(用戶(hù)名為anonymous)。如未指定密碼,則RPM會(huì )根據實(shí)際情況提示用戶(hù)輸入密碼。如未指定端口,則RPM使用默認端口(一般為21)。
如ftp://ftp.xxx.com/yyy.rpm(使用匿名傳輸,主機ftp.xxx.com,包裹文件yyy.rpm);
如ftp://24.109.164.55:1024/pub/yyy.rpm(匿名FTP傳輸,主機IP:24.109.164.55,使用1024端口,包裹文件在/pub目錄下);
如ftp://zhsoft@ftp.xxx.com/yyy.rpm(主機ftp.xxx.com,FTP用戶(hù)名zhsoft,如有密碼,RPM將會(huì )自動(dòng)提示輸入);
如ftp://zhsoft:password@ftp.xxx.com/yyy.rpm(主機ftp.xxx.com,FTP用戶(hù)名zhsoft,密碼password)。
* HTTP方式的命名:http://主機[:端口]/包裹文件
注:[]括住的內容可選。主機可以是主機名,也可是IP地址。包裹文件可含目錄信息。如未指定端口,則RPM默認使用80端口。
如http://www.xxx.com/yyy.rpm(用HTTP獲取www.xxx.com主機上的yyy.rpm文件);
又如http://www.xxx.com:8080/pub/yyy.rpm(用HTTP獲取www.xxx.com主機上/pub目錄下的yyy.rpm文件,使用端口8080)。
3.其它形式(很少使用):
命名格式:任意
如將abc-3.2-1.i386.rpm改名為abc.txt,用RPM安裝也會(huì )安裝成功,其根本原因是RPM判定一個(gè)文件是否RPM格式,不是看名字,而是看內容,看其是否符合特定的格式。
選項詳解
一、安裝指定用選項
1.hash(或-h):以#顯示安裝進(jìn)度
如果一個(gè)軟件包很大、安裝費時(shí)時(shí),用戶(hù)若想及時(shí)了解安裝進(jìn)度,必須用此選項。該選項以顯示#號表示進(jìn)度,每個(gè)#號表示2%的進(jìn)度,總共要顯示50個(gè)#號。下面安裝MySQL軟件包,如下所示:
# rpm -i –hash MySQL-3.22.32-1.i386.rpm
##################################################
#
從上看出,軟件包安裝順利完成。
2.percent:以%(百分比)顯示安裝進(jìn)度
percent的含義是百分比,而此選項的作用就是以百分比(%)來(lái)顯示安裝進(jìn)度的。同樣是安裝MySQL軟件包,下面的輸出就不一樣:
# rpm -i –percent MySQL-3.22.32-1.i386.rpm
%% 0.000000
%% 0.002600
%% 0.020586
……
%% 100.000000
#
上例中省略了很多輸出(……表示)。因為如果軟件包很大,則用–percent時(shí)輸出的內容會(huì )很多,所以用戶(hù)最好用–hash選項,以#號來(lái)表示安裝進(jìn)度,這樣簡(jiǎn)潔明了。
3.test:安裝測試
所謂安裝測試,意即并非真正的安裝,它不拷貝和建立任何文件。使用本選項的目的在于:檢測軟件包的依賴(lài)關(guān)系是否滿(mǎn)足,是否存在潛在的沖突等等。
# rpm -i –test autofs-3.1.3-2.i386.rpm
error: failed dependencies:
mktemp is needed by autofs-3.1.3-2
#
本例進(jìn)行安裝測試時(shí)發(fā)現了依賴(lài)方面的錯誤,autofs所需要的mktemp包不存在,安裝中斷。
下面先安裝mktemp軟件包,再進(jìn)行autofs安裝測試,看情況怎么樣:
# rpm -i mktemp-1.5-2.i386.rpm
# rpm -i –test autofs-3.1.3-2.i386.rpm
#
由上看出,這次測試沒(méi)有出現什么錯誤。
4.replacepkgs:替換軟件包
為什么要替換軟件包?原因可能是系統中的軟件包已經(jīng)破壞了,其中一個(gè)或多個(gè)文件丟失或損毀。如果用戶(hù)想修復這個(gè)軟件包,用直接安裝的方法,RPM將報錯退出:
# rpm -V file
missing/usr/man/man1/file.1
# rpm -i file-3.26-6.i386.rpm
package file-3.26-6 is already installed
#
注:本例先用RPM校驗命令校驗一下file軟件包,發(fā)現/usr/man/man1/file.1文件丟失。之后用安裝命令安裝,RPM提示軟件包file-3.26-6已經(jīng)安裝了。(有關(guān)RPM校驗命令,<<精通RPM之六--校驗篇>>中將會(huì )有詳細的介紹)
如果采用–replacepkgs選項,結果又怎樣呢?
# rpm -i –replacepkgs file-3.26-6.i386.rpm
# rpm -V file
#
看來(lái),RPM成功地替換了原軟件包,校驗一下該包,發(fā)現沒(méi)有錯誤輸出,所以現在的軟件包是完整的。
5.replacefiles:替換文件
RPM是聰明的軟件包管理器,它維護著(zhù)每個(gè)已安裝軟件包的文件信息。如果在安裝一個(gè)新的軟件包時(shí),RPM發(fā)現其中某個(gè)文件和已安裝的某個(gè)軟件包中的文件名字相同但內容不同,那么RPM就會(huì )認為這是一個(gè)文件沖突,會(huì )報錯退出:
# rpm -i ff-4.0-2.i386.rpm
file /root/my.a from install of ff-4.0-2 conflicts with file from package zoo-6.0-1
#
注:本例中RPM發(fā)現要安裝的軟件包ff-4.0-2與已安裝的軟件包zoo-6.0-1中,含有相同的一個(gè)文件/root/my.a,但其內容并不相同,所以提示了文件沖突的錯誤。
如果用戶(hù)想忽略這個(gè)錯誤,可使用–replacefiles選項,指示RPM發(fā)現文件沖突時(shí),直接替換掉原文件即可。注意:除非用戶(hù)對所沖突的文件有很深的了解,不要輕易替換文件,以免破壞已安裝軟件包的完整性,確保其能正常運行。
# rpm -i –replacefiles ff-4.0-2.i386.rpm
#
采用該選項后,軟件包能順利安裝了。
另外,說(shuō)到替換文件,若要安裝的軟件包中的文件已存在,但此文件并不屬于任何軟件包,RPM的做法是將文件換名保存(文件名后綴加.rpmorig),并且以警告信息提醒用戶(hù)。如下所示:
# rpm -i foo-6.0-1.i386.rpm
warning: /etc/foo.conf saved as /etc/foo.conf.rpmorig
#
6.allfiles:安裝所有文件
讀者看到此選項,也許要問(wèn):難道RPM安裝軟件包不是安裝其中所有的文件嗎?
我的回答是:如果是初次安裝的話(huà),RPM確是將包中所有文件全部安裝。但是,如果是修復軟件包(用–replacepkgs選項),那結果就不一定了。個(gè)中原因是:RPM包中有些配置文件可標識為missingok屬性(missingok指的是即使丟失,照樣OK),這樣的包安裝后,若這種類(lèi)型的配置文件被刪除,則修復時(shí)RPM默認的做法是不再安裝這種類(lèi)型的文件,除非采用–allfiles選項。下面看個(gè)實(shí)際的例子:
# rpm -i foo-6.0-1.i386.rpm
# ls -l /etc/foo.conf
-rw-r–r– 1 root root9 Oct 11 09:50 /etc/foo.conf
# rm -f /etc/foo.conf
# rpm -i –replacepkgs foo-6.0-1.i386.rpm
# ls -l /etc/foo.conf
ls: /etc/foo.conf: 文件或目錄不存在
# rpm -i –replacepkgs –allfiles foo-6.0-1.i386.rpm
# ls -l /etc/foo.conf
-rw-r–r– 1 root root9 Oct 11 09:50 /etc/foo.conf
注:本例中已預先知道foo包中的配置文件/etc/foo.conf帶有missingok屬性。
(1)用rpm -i命令安裝foo包;
(2)用ls命令列一下屬于該包的配置文件/etc/foo.conf(能列出來(lái),表明文件存在);
(3)用rm命令刪除了這個(gè)文件;
(4)用rpm -i –replacepkgs命令修復foo軟件包;
(5)因為修復時(shí)未用–allfiles選項,所以用ls命令列文件/etc/foo.conf時(shí)出錯了:文件不存在,沒(méi)有安裝上;
(6)用rpm -i –replacepkgs –allfiles命令安裝修復foo軟件包;
(7)再度用ls命令列文件,列了出來(lái),表明這次安裝上了。
由本例看出,若用戶(hù)確實(shí)想安全恢復(修復)某個(gè)軟件包,最好使用–allfiles選項。一般情況下則不必這么做,因為帶有missingok屬性的配置文件本來(lái)就是可以丟失的嘛,不必太在意了。
7.force:強制執行
force的含義是強制。–force選項的作用就是強制安裝軟件包,不考慮軟件包是否已安裝,也不考慮有沒(méi)有文件沖突。其效果相當于同時(shí)選用–replacepkgs與–replacefiles選項進(jìn)行安裝。
8.excludedocs:不安裝說(shuō)明文檔
RPM有多個(gè)好功能,其中之一就是:它將文件分為配置文件,說(shuō)明文檔和其它文件三種,這樣便于區別對待,靈活處理。
基于RPM安裝的LINUX發(fā)行版中包括5000多個(gè)說(shuō)明文檔,有50M字節,占用的空間不小。如果想節省空間,可使用–excludedocs選項以排除安裝說(shuō)明文檔。
如軟件包file中包含/usr/man/man1/file.1和/usr/man/man4/magic.4兩個(gè)說(shuō)明文檔。安裝時(shí)若使用–excludedocs選項,這兩個(gè)文檔就不會(huì )被安裝。
# rpm -i –excludedocs file-3.26-6.i386.rpm
# ls -l /usr/man/man1/file.1
ls: /usr/man/man1/file.1: 文件或目錄不存在
# ls -l /usr/man/man4/magic.4
ls: /usr/man/man4/magic.4: 文件或目錄不存在
#
如果用戶(hù)想讓RPM默認不安裝說(shuō)明文檔,則可以這么做:編輯~/.rpmmacros文件(用戶(hù)主目錄HOME下的RPM宏文件),加入下面一行:
%_excludedocs 1
其作用是定義RPM內部的_excludedocs宏為1,確認不安裝說(shuō)明文檔。
這樣的話(huà),就不用在命令行使用–excludedocs選項了。
# rpm -i file-3.26-6.i386.rpm
# ls -l /usr/man/man1/file.1
ls: /usr/man/man1/file.1: 文件或目錄不存在
# ls -l /usr/man/man4/magic.4
ls: /usr/man/man4/magic.4: 文件或目錄不存在
#
9.includedocs:安裝說(shuō)明文檔
RPM一般情況下是安裝說(shuō)明文檔的,但是如果用戶(hù)自行修改了設定(象上面的例子),則RPM就不再安裝說(shuō)明文檔了,除非特別指定,這就用到–includedocs選項。這種情況下,只有用此選項才能確保安裝說(shuō)明文檔。
# rpm -i –includedocs file-3.26-6.i386.rpm
# ls -l /usr/man/man1/file.1
-rwxr-xr-x 1 root root12023 Mar 23 1999 /usr/man/man1/file.1
# ls -l /usr/man/man4/magic.4
-rwxr-xr-x 1 root root 6625 Mar 23 1999 /usr/man/man4/magic.4
#
10.noscripts:不執行腳本程序
一個(gè)RPM軟件包中可包含五種腳本程序,即:安裝前腳本程序,安裝后腳本程序,卸載前腳本程序,卸載后腳本程序和校驗腳本程序。安裝時(shí)使用–noscripts選項,可禁止安裝前與安裝后腳本程序的執行。
# rpm -i foo-6.0-1.i386.rpm
preinstall is running … done
postinstall is running … done
#
上面不禁止腳本程序的執行,下面不執行腳本程序,請看輸出結果:
# rpm -i –noscripts foo-6.0-1.i386.rpm
#
看,因為沒(méi)有安裝前與安裝后腳本程序的執行,所以沒(méi)有什么輸出了。
注意:一般用戶(hù)不要使用此選項。此選項主要提供給軟件包制作者使用的。通過(guò)禁止執行腳本程序,可以防止因安裝帶有BUG的軟件包而宕掉整個(gè)系統。當軟件包去掉了BUG后,此選項就不必使用了。
11.nodeps:不檢查依賴(lài)
RPM管理軟件包,不僅管理包中的所有文件,還同時(shí)管理著(zhù)軟件包之間的依賴(lài)關(guān)系。如A依賴(lài)于B運行,若B不存在了,則A也就運行不了了。RPM維護著(zhù)這種關(guān)系,盡量避免破壞,以保證軟件的正常運行。
# rpm -i autofs-3.1.3-2.i386.rpm
error: failed dependencies:
mktemp is needed by autofs-3.1.3-2
#
本例安裝中出現了依賴(lài)方面的錯誤(autofs依賴(lài)mktemp,但mktemp不存在),安裝過(guò)程中斷了。如果要RPM不管依賴(lài)關(guān)系是否正常都安裝,就要用–nodeps選項,指示RPM不檢查依賴(lài),這樣就能正常安裝了。
# rpm -i –nodeps autofs-3.1.3-2.i386.rpm
#
注:除非用戶(hù)對軟件包有足夠了解,或只想看看軟件,否則不要使用本選項,以維護軟件間正常的依賴(lài)關(guān)系。
12.notriggers:不執行觸發(fā)程序
為了軟件包間的交互控制,RPM設計了三種觸發(fā)程序:安裝時(shí)觸發(fā)程序,卸載前觸發(fā)程序和卸載后觸發(fā)程序。為了防止因某一軟件包的安裝而引發(fā)安裝時(shí)觸發(fā)程序的執行,可以使用–notriggers選項。
13.ignorearch:忽略體系與ignoreos :忽略操作系統
何謂體系?體系就是CPU的類(lèi)別,有Intel的x86(如i386,i486系列)體系,有Sun的sparc體系等等。當一個(gè)軟件包建立時(shí),RPM就為其指定了所適用的CPU體系,也為其指定了所適用的操作系統。這樣做的好處就是,RPM容易知道為一臺計算機所建立的軟件包是否適用于兼容于另一臺計算機。RPM的資源配置文件(默認為/usr/lib/rpm/rpmrc)中,就定義了體系的兼容關(guān)系(arch_compat表達)和操作系統的兼容關(guān)系(os_compat表達)。RPM安裝一個(gè)包裹文件時(shí),要做這樣一個(gè)兼容方面的檢查。如果用戶(hù)想忽略體系,不管其是否兼容,請用–ignorearch選項安裝。如果也不管操作系統是否兼容,可用–ignoreos選項。需要指出的是,若非知道自己這樣的目的,否則不要試圖這樣做。
14.ignoresize:不檢查空間大小
RPM安裝軟件包前,首先要檢查當前系統是否有足夠的剩余空間,如果空間不足的話(huà),安裝將無(wú)法完成。使用本選項的目的,在于指示RPM不做空間大小方面的檢查,意即不管系統是否有容納要安裝的軟件包的空間,照直安裝就行了。
15.relocate:重定位
RPM軟件包在制作過(guò)程中,可以定義一個(gè)或多個(gè)重定位前綴,以此方便軟件的重定位(即把軟件包中的文件放到自定義的目錄下面),從而增加軟件包安裝的靈活性。
本選項用于更換指定的重定位目錄,如果一個(gè)包有多個(gè)重定位前綴,可以使用本選項多次。
# rpm -qpl file-3.26-6.i386.rpm
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
# rpm -i –relocate /usr=/tmp file-3.26-6.i386.rpm
# rpm -ql file
/tmp/bin/file
/tmp/man/man1/file.1
/tmp/man/man4/magic.4
/tmp/share/magic
#
注:本例中先用rpm -qpl列出包裹文件file-3.26-6.i386.rpm當中的文件,可以看到其中的文件均是以/usr開(kāi)頭的。之后進(jìn)行重定位安裝,將/usr換作/tmp。最后從列出已安裝的file包的文件列表可以看出,原來(lái)的/usr目錄前綴換作指定的前綴/tmp了,這樣實(shí)現了軟件的重定位。(關(guān)于RPM查詢(xún)命令,詳見(jiàn)<<精通RPM之五--查詢(xún)篇>>)
16.badreloc:強制重定位
RPM軟件包的重定位,依賴(lài)于制作時(shí)重定位前綴的定義。如果沒(méi)有定義重定位前綴,或者用戶(hù)安裝時(shí)所指定的重定位前綴不存在,則RPM會(huì )報錯退出,中斷安裝。此時(shí),若用本選項,則RPM會(huì )不管這些錯誤,進(jìn)行強制的重定位安裝。注:本選項和–relocate選項同時(shí)使用時(shí)才有意義。
如上例,采用并不存在的重定位前綴/usr/man進(jìn)行安裝:
# rpm -i –relocate /usr/man=/tmp file-3.26-6.i386.rpm
path /usr/man is not relocateable for package file-3.26-6
#
RPM提示了錯誤:/usr/man目錄在file-3.26-6包中是不可重定位的。
如加上–badreloc選項,結果怎么樣:
# rpm -i –relocate /usr/man=/tmp –badreloc file-3.26-6.i386.rpm
# rpm -ql file
/usr/bin/file
/tmp/man1/file.1
/tmp/man4/magic.4
/usr/share/magic
#
由上可以看到,這樣的強制重定位獲得通過(guò),之后再用查詢(xún)命令rpm -ql列一下file包的文件,就會(huì )發(fā)現原來(lái)的/usr/man/man1/file.1定位成了/tmp/man1/file.1,而/usr/man/man4/magic.4則成了/tmp/man4/magic.4。怎么樣?神奇吧!
17.excludepath:不安裝指定目錄下的文件
利用此選項,可以禁止RPM安裝某些指定目錄下的文件。如不想安裝file軟件包中的說(shuō)明文檔,除了可使用–excludedocs選項外,還可使用本選項。因為file的說(shuō)明文檔均在目錄/usr/man下面。
# rpm -i –excludepath /usr/man file-3.26-6.i386.rpm
# rpm -qls file
normal/usr/bin/file
not installed /usr/man/man1/file.1
not installed /usr/man/man4/magic.4
normal/usr/share/magic
#
注:例子中先安裝file軟件包,并用–excludepath禁止安裝/usr/man下的文件,再用RPM查詢(xún)命令rpm -qls列出file包的文件及狀態(tài),可以看到:/usr/man下的兩個(gè)文件均未安裝(not installed)。
18.justdb:僅更新數據庫
安裝軟件包使用此選項后,RPM將只更新其數據庫數據,文件系統不更新,意即并不拷貝和建立包中的文件。
# rpm -i –justdb file-3.26-6.i386.rpm
# rpm -qls file
normal/usr/bin/file
normal/usr/man/man1/file.1
normal/usr/man/man4/magic.4
normal/usr/share/magic
# ls -l /usr/bin/file
ls: /usr/bin/file: 文件或目錄不存在
#
注:例子中安裝file包但指明只更新數據庫,結果是:雖然用查詢(xún)命令查到該軟件包中所有文件狀態(tài)均正常(normal),但用ls命令列包中所含文件/usr/bin/file,該文件卻不存在。這表明包中文件并未建立。
19.prefix:指定重定位前綴
如前所述,可重定位的軟件包可含一個(gè)或多個(gè)重定位前綴,可用–relocate選項來(lái)改變某個(gè)重定位前綴之值。–prefix選項僅能用來(lái)改變默認的重定位前綴(默認是第一個(gè)重定位前綴),它不需要說(shuō)明原重定位前綴。下面的例子同樣將file包安裝到/tmp目錄:
# rpm -qpl file-3.26-6.i386.rpm
/usr/bin/file
/usr/man/man1/file.1
/usr/man/man4/magic.4
/usr/share/magic
# rpm -i –prefix /tmp file-3.26-6.i386.rpm
# rpm -ql file
/tmp/bin/file
/tmp/man/man1/file.1
/tmp/man/man4/magic.4
/tmp/share/magic
#
20.ftpproxy:指定FTP代理主機
本選項指定FTP代理主機,主機可以是主機名,也可以是IP地址。
21.ftpport:指定FTP端口
本選項指定FTP協(xié)議使用的TCP端口,系統默認是21。
請看下面的例子:
# rpm -iv –ftpport 8888 ftp://root@xwboc/tmp/file-3.26-6.i386.rpm
Password for root@xwboc:
Password for root@xwboc:
Retrieving ftp://root@xwboc/tmp/file-3.26-6.i386.rpm
file-3.26-6
#
本例中用FTP方式安裝file軟件包,數據傳輸使用8888端口。執行中,RPM先提示輸入root用戶(hù)的密碼
22.httpproxy:指定HTTP代理主機
本選項指定HTTP代理主機,主機可以是主機名,也可以是IP地址。
23.httpport:指定HTTP端口
本選項指定HTTP協(xié)議使用的TCP端口,系統默認是80。
下面的例子就指定了80端口來(lái)安裝autofs軟件,當然不指定也行,因為系統默認的就是這個(gè)端口。
# rpm -iv –httpport 80 http://24.109.164.55/rpms/autofs-3.1.3-2.i386.rpm
Retrieving http://24.109.164.55/rpms/autofs-3.1.3-2.i386.rpm
autofs-3.1.3-2
#
注:同FTP方式一樣,RPM都是下載再安裝。
二、通用選項
所謂通用選項,就是不管是安裝,升級,卸載還是其它軟件包操作,統統適用的選項。
這樣的選項主要以下幾個(gè):
1.-v:顯示附加信息
一般情況下,RPM和不少LINUX命令(如cp,rm,mv等)一樣,都本著(zhù)盡可能少輸出信息的原則(除非必要,否則不要輸出),這樣做是為了避免浪費CPU資源。所以,當用戶(hù)使用某個(gè)命令后沒(méi)有什么輸出,這就意味著(zhù)命令執行成功了。如果有什么錯誤,程序會(huì )提示的。RPM也是這個(gè)樣子。為了使RPM輸出多一點(diǎn)的信息,可以使用-v選項。
如不帶此選項安裝file包,沒(méi)有輸出:
# rpm -i file-3.26-6.i386.rpm
#
而采用-v選項后安裝時(shí)輸出了包名:
# rpm -i -v file-3.26-6.i386.rpm
file-3.26-6
#
2.-vv:顯示調試信息
選用-vv選項,可以使RPM輸出更多的信息。這些信息,主要供RPM軟件開(kāi)發(fā)者研究使用的,一般用戶(hù)也可以看看,從中可以知道RPM究竟干些什么。
下面采用此選項安裝file包,同時(shí)使用管道線(xiàn)(|)將輸出數據送nl命令,以帶行號輸出每行數據。

從執行結果看,輸出的信息很多,其中以D:開(kāi)頭的行均是調試信息?,F在逐行解釋?zhuān)?
第1行:統計要安裝的軟件包個(gè)數;
第2行:RPM找到1個(gè)包;
第3行:查看哪些包需要下載(這些要下載的包,都是以FTP或HTTP形式書(shū)寫(xiě)的包名);
第4行:下載了0個(gè)包;
第5-10行:取包裹文件的文件頭信息,算出軟件包占用的空間68019(字節),以利檢查
系統是否有足夠空間。
第11行:打開(kāi)RPM數據庫;
第12行:找到0個(gè)源代碼包,1個(gè)執行代碼包;
第13-18行:檢查軟件包的依賴(lài)關(guān)系。其依賴(lài)(requires)的東西均得到滿(mǎn)足(satisfied)。
第19行:準備安裝執行代碼包;
第20行:取得已安裝文件系統的列表;
第21-26行:再度取包裹文件頭信息,算出軟件包占用空間;
第27-31行:列出包中文件及要執行的操作,第27行的test=0表示不是進(jìn)行安裝測試,
file包中的文件均要執行創(chuàng )建操作(create)。
第32行:如果有安裝前執行腳本程序的話(huà),執行它;
第33行:安裝軟件包file-3.26-6;
第34行:如果有安裝后執行腳本程序的話(huà),執行它。
3.root:指定根目錄
指定根目錄ROOT,其作用在于將系統所有操作限定在指定的目錄下面,這樣RPM操作的數據庫位置變了,軟件包的安裝位置也變了。它是通過(guò)chroot系統調用實(shí)現的。RPM默認的數據庫目錄是/var/lib/rpm,如果指定根目錄為/usr,則RPM的數據庫目錄將變?yōu)?usr/var/lib/rpm。同樣,如果包中有個(gè)文件為/etc/zhsoft.txt,則安裝后為/usr/etc/zhsoft.txt。
看下面的例子:
# rpm -i –root /usr file-3.26-6.i386.rpm
failed to open /usr/var/lib/rpm/packages.rpm
error: 不能打開(kāi) /usr/var/lib/rpm/packages.rpm
#
注:指定RPM根目錄為/usr安裝file出現錯誤,RPM打不開(kāi)/usr/var/lib/rpm/packages.rpm文件,這是因為實(shí)際上在/usr/var/lib/rpm目錄下沒(méi)有任何RPM數據庫。如果想成功安裝,可用初始化RPM數據庫命令來(lái)建立RPM數據庫,命令是rpm –initdb –root /usr(這些功能將在以后講到)。
4.rcfile:指定RPM資源配置文件
RPM的資源配置文件里,存放著(zhù)RPM的默認設置,有編譯選項optflags,體系定義arch_canon,兼容定義arch_compat,宏文件定義macrofiles等。RPM默認的資源配置文件(按讀取順序)為:/usr/lib/rpm/rpmrc,/etc/rpmrc,~/.rpmrc。(后兩個(gè)文件現在意義不大了,如今一般換作RPM宏文件了。較之資源配置文件,宏文件有更大的靈活性。)
如果想讓RPM使用用戶(hù)指定的資源配置文件,就用–rcfile來(lái)設定,可同時(shí)設定多個(gè)文件,文件間以冒號(:)分隔,如/usr/lib/rpm/rpmrc:/etc/rpmrc:~/.rpmrc這種形式。
5.dbpath:指定RPM數據庫目錄
本選項不同于–root選項,它僅僅是指定RPM數據庫的目錄,并不改變安裝文件的位置。
- 作者: Daemon 訪(fǎng)問(wèn)統計: 201 2005年11月8日, 星期二 14:42 加入博采 打印
聯(lián)系客服