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 <file>; 將查詢包含有文件<file>;. 的軟件包 
· -p <packagefile>; 查詢軟件包文件名為<packagefile>;的軟件包 
還可以指定查詢軟件包時所顯示的信息。它們被稱作信息選擇選項: 
· -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

轉載于:https://blog.51cto.com/8276689/2124961

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451549.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451549.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451549.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Unix 多進程編程

一.多進程程序的特點由于UNIX系統是分時多用戶系統, CPU按時間片分配給各個用戶使用, 而在實質上應該說CPU按時間片分配給各個進程使用, 每個進程都有自己的運行環境以使得在CPU做進程切換時不會"忘記"該進程已計算了一半的"半成品". 以DOS的概念來說, 進程…

Redis單線程模型是什么?

參考文章&#xff1a; redis 單線程的理解 謝謝作者分享&#xff01;

寂靜的時候

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 每每聽到熟悉的旋律&#xff0c;終又會驟然就無法抑制排山倒海般的憂傷... 就這樣想往若已經年邁到只能坐在夕陽余暉里遙望遠方該多好.…

@staticmethod和@classmethod的作用與區別

一般來說&#xff0c;要使用某個類的方法&#xff0c;需要先實例化一個對象再調用方法。 而使用staticmethod或classmethod&#xff0c;就可以不需要實例化&#xff0c;直接類名.方法名()來調用。 這有利于組織代碼&#xff0c;把某些應該屬于某個類的函數給放到那個類里去&…

前端開發注意事項(HTML與CSS進階)

HTML 與 CSS 進階 Img 標簽 alt 屬性 一定要添加 用于圖片描述 給機器看的&#xff0c;如果圖片加載失敗&#xff0c;會顯示 alt <img src"" alt""/> 為 img 添加 圖片注釋 建議做法為 figure(圖形) 和 figcaption [caption(字幕)]<figure>…

如果你懂我…

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 想往的世界&#xff0c;有風如深秋的柳絮… 翻飛在遙遠的寂靜里… 若冷落…若別離… 若守候…若赤誠… 若我…

[NOI2005]維護數列 惡心到毀天滅地的splay

傳送門 debug到死2333. 雖然說是splay維護序列模板&#xff0c;作為蒟蒻的我還是GG %%%考場A的dalao Orz Orz. 其實不開long long也行&#xff0c;inf開成0x3f3f3f3f也可&#xff08;flag,歡迎推翻&#xff09; 就當存個板子吧. #include<bits/stdc.h> #include<cs…

Python的from import和import的區別

對于from...import...&#xff0c;其意義具體是from Module import Function或Class等&#xff0c;這個只是從模塊中導入一個或幾個函數或類的做法。另外一個常見的是import Module&#xff0c;就是把整個模塊中得東西都導入&#xff0c;所以你后面的程序就都可以使用了。另外還…

靜態代理、動態代理、AOP

參考文章&#xff1a; Java中的代理模式——靜態代理以及分析靜態代理的缺點 Java中動態代理的兩種方式JDK動態代理和cglib動態代理以及區別 Spring中的AOP以及切入點表達式和各種通知

Linux系統中解壓縮指令匯總

.tar 解包&#xff1a; tar xvf FileName.tar 打包&#xff1a;tar cvf FileName.tar DirName &#xff08;注&#xff1a;tar是打包&#xff0c;不是壓縮&#xff01;&#xff09; --------------------------------------------- .gz 解壓1&#xff1a;gunzip FileName.gz 解…

python中的@

函數修飾符 ‘’ 用做函數的修飾符&#xff0c;可以在模塊或者類的定義層內對函數進行修飾&#xff0c; 出現在函數定義的前一行&#xff0c;不允許和函數定義在同一行 一個修飾符就是一個函數&#xff0c;它將被修飾的函數作為參數&#xff0c;并返回修飾后的同名函數或其他可…

這樣想起...

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 // 看到一張精致的自然風景圖片&#xff0c;心生向往. 在海的一個小小角落邊&#xff0c;有一寓不很大的房子&#xff0c;暮色浸染的云彩…

python幾種括號表示的類型

python語言最常見的括號有三種&#xff0c;分別是&#xff1a;小括號( )、中括號[ ]和大括號&#xff08;也叫做花括號{ }&#xff09;。其作用也各不相同&#xff0c;分別用來代表不同的python基本內置數據類型。 1、python中的小括號( )&#xff1a;代表tuple元組數據類型&am…

IT巨頭互掐云存儲:Dropbox能否一馬當先

隨著北京時間4月25日Google Drive橫空出世&#xff0c;微軟也迫不及待的發布了SkyDrive的大量更新。各大巨頭進軍云存儲市場&#xff0c;激烈角逐的意向已經昭然可見。網友針對此事紛紛發表熱議。蘋果、微軟、谷歌三巨頭加上一個Dropbox各出各的云存儲高招&#xff1a;微軟SkyD…

Spring集成redis(Spring Data Redis)

2019獨角獸企業重金招聘Python工程師標準>>> 轉載地址&#xff1a;http://blog.csdn.net/zhu_tianwei/article/details/44923001 Spring-data-redis是spring大家族的一部分&#xff0c;提供了在srping應用中通過簡單的配置訪問redis服務&#xff0c;對reids底層開發…

python中利用re模塊使用正則表達式

Python通過re模塊提供對正則表達式的支持。使用re的一般步驟是先使用re.compile()函數&#xff0c;將正則表達式的字符串形式編譯為Pattern實例&#xff0c;然后使用Pattern實例處理文本并獲得匹配結果&#xff08;一個Match實例&#xff09;&#xff0c;最后使用Match實例獲得…

Java三大變量分別是類變量、實例變量和局部變量

什么是變量:就是內容可以改變的量&#xff0c;它與常量相對應。而這三大變量實際上是從變量的作用域來定義和劃分的。 1、類變量&#xff0c;是歸屬類的變量&#xff0c;它是通過在定義類的屬性的時&#xff0c;增加static修飾符&#xff0c;所以又稱為靜態變量。類變量不僅可…

路途

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 PS : 這應該是08年寫的了吧.... 像是追尋明天的滄海一束&#xff0c; 不知道什么時候開始走上這樣熟悉的路途. 當天空開始一點一點變…

redux 源碼詳解

redux 單向數據流的由來 Flux將應用分成四個部分;view 視圖層;Action 視圖層發出的消息&#xff1b;(改變store里面的數據)Dispatch(派發器)Store (數據層) : 用來存在應用的狀態(數據)&#xff0c;一旦發生變動,就要提醒view更新頁面。redux單向數據流&#xff1a; 具體詳情請…

冒泡排序與快速排序(java實現)

冒泡排序&#xff1a; public class bubbleSort {public static void bubbleSort1(int [] a, int n){int i, j;for(i0; i<n; i){//表示 n 次排序過程。for(j1; j<n-i; j){if(a[j-1] > a[j]){//前面的數字大于后面的數字就交換//交換 a[j-1]和 a[j]int temp;temp a[j…