以下由 liuqing9906 提供
RPM 大全
RPM 有五種基本的操作方式(不包括創建軟體包): 安裝, 卸載, 升級, 查詢,和驗證. 下面我們就來逐一的講解吧.
一、 安裝RPM包
RPM 軟體包通常具有類似foo-1.0-1.i386.rpm 的文件名.其中包括 軟體包的名稱(foo),版本號(1.0),
發行號(1), 和 硬體平台(i386).安裝一個軟體包只需簡單的鍵入以下命令:
$ rpm -ivh foo-1.0-1.i386.rpm
foo ####################################
RPM安裝完畢後會列印出軟體包的名字(並不一定與文件名相同), 而後列印一連串的#號以表示安裝
進度.雖然軟體包的安裝被設計的盡量簡單易行, 但還是可能會發生如下的錯誤:
1、 軟體包已被安裝
如果您的軟體包已被安裝, 將會出現以下信息:
$ rpm -ivh foo-1.0-1.i386.rpm
foo package foo-1.0-1 is already installed
error: foo-1.0-1.i386.rpm cannot be installed
如果您仍舊要安裝該軟體包,可以在命令行上使用--replacepkgs 選項,RPM將忽略該錯誤信息強行安裝.
2、文件衝突
如果您要安裝的軟體包中有一個文件已在安裝其它軟體包時安裝,會出現以下錯誤信息:
# rpm -ivh foo-1.0-1.i386.rpm
foo /usr/bin/foo conflicts with file from bar-1.0-1
error: foo-1.0-1.i386.rpm cannot be installed
要想讓RPM 忽略該錯誤信息, 請使用--replacefiles 命令行選項.
3、未解決依賴關係
RPM軟體包可能依賴於其它軟體包,也就是說要求在安裝了特定的軟體包之後才能安裝該軟體包.
如果在您安裝某個軟體包時存在這種未解決的依賴關係.會產生以下信息:
$ rpm -ivh bar-1.0-1.i386.rpm
failed dependencies: foo is needed by bar-1.0-1
您必須安裝完所依賴的軟體包,才能解決這個問題.如果您想強制安裝(這是個壞主意,
安裝后的軟
件包未必能正常運行), 請使用--nodeps 命令行選項.
二、卸載RPM包
卸載軟體包就象安裝軟體包時一樣簡單:
$ rpm -e foo
注意這裡使用軟體包的名字name ``foo, 而不是軟體包文件的名字file ``foo-1.0-1.i386.rpm.
如果其它軟體包依賴於您要卸載的軟體包,卸載時則會產生錯誤信息.如:
$ rpm -e foo
removing these packages would break dependencies:foo is needed by bar-1.0-1
若讓RPM忽略這個錯誤繼續卸載(這可不是一個好主意,依賴於該軟體包的程序可能無法運行),
請使用--nodeps 命令行選項.
三、升級RPM包
升級軟體包和安裝軟體包十分類似:.
$ rpm -Uvh foo-2.0-1.i386.rpm
foo ####################################
RPM將自動卸載已安裝的老闆本的foo 軟體包,您不會看到有關信息.事實上您可能總是使用 -U 來
安裝軟體包,即便以往未安裝過該軟體包,也能正常運行.RPM 執行智能化的軟體包升級,
自動處理配置文件,您將會看到如下信息:
saving /etc/foo.conf as /etc/foo.conf.rpmsave
這表示您對配置文件的修改不一定能向上兼容. 因此,RPM 會先備份老文件再安裝新文件.您應當儘快解
決這兩個配置文件的不同之處,以使系統能持續正常運行.
升級實際包括軟體包的卸載與安裝兩個過程,您可能會碰到由這兩個操作引起的錯誤.另一個你
可能碰到的問題是:當您使用舊版本的軟體包來升級新版本的軟體時,RPM會產生以下錯誤信息:
$ rpm -Uvh foo-1.0-1.i386.rpm
foo package foo-2.0-1 (which is newer) is already installed
error: foo-1.0-1.i386.rpm cannot be installed
如果你確有需要將該軟體包」降級,加入 --oldpackage 命令選項就可以了.
四、 查詢已安裝的軟體包
使用命令rpm -q來查詢已安裝軟體包的資料庫.簡單的使用命令 rpm -q foo 會列印出foo軟體包 的包名 ,
版本號,和發行號:
$ rpm -q foo
foo-2.0-1
除了指定軟體包名以外,您還可以使用以下選項來指明要查詢哪些軟體包的信 息. 這些選項被稱之為
「軟體包指定選項「.
· -a 查詢所有已安裝的軟體包
· -f 將查詢包含有文件. 的軟體包
· -p 查詢軟體包文件名為的軟體包
還可以指定查詢軟體包時所顯示的信息.它們被稱作信息選擇選項:
· -i 顯示軟體包信息,如描述, 發行號, 尺寸, 構建日期, 安裝日期, 平台, 以及其它一些各類信息.
· -l 顯示軟體包中的文件列表.
· -s 顯示軟體包中所有文件的狀態.
· -d 顯示被標註為文檔的文件列表(man 手冊, info 手冊, READMEs, etc).
· -c 顯示被標註為配置文件的文件列表.這些是您要在安裝完畢以後加以定製的文件(sendmail.cf,
passwd, inittab, etc).
對於那些要顯示文件列表的文件, 您可以增加-v 命令行選項以獲得如同 ls -l 格式的輸出.
五、 驗證軟體包
驗證軟體包是通過比較已安裝的文件和軟體包中的原始文件信息來進行的.驗證主要是比較文件的尺寸,
MD5 校驗碼, 文件許可權, 類型, 屬主和用戶組等.
rpm-V命令用來驗證一個軟體包.您可以使用任何包選擇選項來查詢您要驗證的軟體包. 命令rpm -V foo
將用來驗證foo軟體包.又如:
· 驗證包含特定文件的軟體包:
rpm -Vf /bin/vi
· 驗證所有已安裝的軟體包:
rpm -Va
· 根據一個RPM包來驗證:
rpm -Vp foo-1.0-1.i386.rpm
如果您擔心你的RPM資料庫已被破壞,就可以使用這種方式.
如果一切均校驗正常將不會產生任何輸出.如果有不一致的地方,就會顯示出來. 輸出格式是8位長字元
串, ``c 用以指配置文件, 接著是文件名. 8位字元的每一個 用以表示文件與RPM資料庫中一種屬性的比較
結果 .``. (點) 表示測試通過..下面的字元表示對RPM軟體包進行的某種測試失敗:
顯示字元 錯誤源
5 MD5 校驗碼
S 文件尺寸
L 符號連接
T 文件修改日期
D 設備
U 用戶
G 用戶組
M 模式e (包括許可權和文件類型)
如果有錯誤信息輸出, 您應當認真加以考慮,是通過刪除還是重新安裝來解決出現的問題.
六、教你一招
RPM不僅是安裝/卸載程序的工具,它還是系統維護和診斷的一把好手.看過下面幾個例子你就會領教它的
厲害了.
· 如果您誤刪了一些文件, 但您不能肯定到底都刪除了那些文件,怎麼辦? 您可以鍵入:
rpm -Va
rpm會在屏幕上顯示出文件刪除的情況.若你發現一些文件丟失了或已被損壞, 您就可以重新安裝或先卸載
再安裝該軟體包.
· 如果您碰到了一個自己不認識的文件,要想查處它屬於哪個軟體包,您可以輸入以下命令
rpm -qf /usr/X11R6/bin/xjewel
輸出的結果會是:
xjewel-1.6-1
· 如果發生綜合以上兩個例子的情況,如文件/usr/bin/paste出了問題.您想知道哪個軟體包中包含該文
件,您這時可以簡單的鍵入:
rpm -Vf /usr/bin/paste
· 如果您想了解正在使用的程序的詳細信息, 您可以鍵入如下命令來獲得軟體包中關於該程序的文檔信息:
rpm -qdf /usr/bin/ispell
輸出結果為:
/usr/man/man4/ispell.4
/usr/man/man4/english.4
/usr/man/man1/unsq.1
/usr/man/man1/tryaffix.1
/usr/man/man1/sq.1
/usr/man/man1/munchlist.1
/usr/man/man1/ispell.1
/usr/man/man1/findaffix.1
/usr/man/man1/buildhash.1
/usr/info/ispell.info.gz
/usr/doc/ispell-3.1.18-1/README
· 您發現了一個新的koules RPM,但您不知道它是做什麼的,您可以鍵入如下命令:
rpm -qip koules-1.2-2.i386.rpm
· 現在您想了解koules的 RPM包在系統里安裝了哪些文件, 您可以鍵入:
rpm -qlp koules-1.2-2.i386.rpm輸出結果為:
/usr/man/man6/koules.6
/usr/lib/games/kouleslib/start.raw
/usr/lib/games/kouleslib/end.raw
/usr/lib/games/kouleslib/destroy2.raw
/usr/lib/games/kouleslib/destroy1.raw
/usr/lib/games/kouleslib/creator2.raw
/usr/lib/games/kouleslib/creator1.raw
/usr/lib/games/kouleslib/colize.raw
/usr/lib/games/kouleslib
/usr/games/koules
以上只是幾個常見例子.隨著您進一步的使用RPM,您會發現它的各種功能選項組合可以實現更為強大的
RPM包管理功能.