Linux RPM命令

Linux 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 手冊, README’s, 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包管理功能

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章