|
RPM不僅在安裝,升級,卸載方面工作出色,而且在查詢方面比其它軟件包管理工具更勝一籌。這從以下幾種情況可以看出:
* 當你在瀏覽系統(tǒng)文件時,發(fā)現(xiàn)一個文件,想知道它來自哪個軟件包時,可以用RPM來查詢得知; * 當你的朋友給你發(fā)送來一個軟件包,但你不知道這是個什么樣的軟件包,不知道它做些什么,安裝些什么,來源是哪里。這時,你可以用RPM查詢搞定; * 幾個月前你安裝了XFree86窗口軟件,但現(xiàn)在你忘了它的版本號,也不知它的說明文檔在哪里。這時,你可以用RPM查詢一下這個軟件包,得到這方面的信息。 RPM的查詢還有一個高級功能,即定制輸出功能。你可用——queryformat(或-qf)來定制一下輸出格式,這樣,RPM查詢得到的信息將以你定制的格式輸出,這樣很是方便,尤適合于程序的自動處理。 命令格式 查詢RPM格式的軟件包,可使用如下命令格式:
注: 也可使用——query代替-q,效果相同。 選項列表 選項詳解 指定用選項中ftp與http相關的四個選項(——ftpproxy,——ftpport,——httpproxy,——httpport)和通用選項的解釋,請參見<<精通RPM之二——安裝篇>>,本文不再贅述。下面對指定用選項做些解釋: 指定用選項可分為如下幾類: 一、軟件包選擇類 此類選項在一次只能選擇一個,選擇多個時RPM將提示錯誤: rpm: one type of query/verify may be performed at a time 從查詢方面看,一個是查詢那些已安裝的軟件包,一個是查詢未安裝的軟件包。 1. 查詢已安裝的軟件包,使用下列選項: (1) -a (或——all) : 查詢所有已安裝的軟件包
注: 本例查找當前系統(tǒng)中安裝的所有軟件包,輸出很多,僅列出幾個,剩下的省略掉了(以......表示)。 (2) -g (或——group) : 查詢有哪些軟件包屬于指定類別 RPM根據(jù)軟件功用的不同,將軟件分為以下若干類:(括號內為注釋)
注意: 類別是大小寫敏感的,這一點輸入時要小心。如果用戶想要查詢當前系統(tǒng)安裝了哪些游戲類的軟件包,可這樣做:
如果用戶想查詢若干類別的軟件包時,可以把類別都列出來,一起查詢,如:
注: 本例查詢結果中前6個為"應用/編輯器"類別,后8個為"應用/文件"類別。 (3) -f (或——file) : 查詢有哪些軟件包擁有指定文件這個選項非常有用。當用戶不清楚某個文件屬于哪個軟件包時,可試試這個選項。假如我記不清/usr/sbin/ftpd這個文件在哪個包中,現(xiàn)在用RPM查詢:
現(xiàn)在知道了,它在inet6-apps-0.36-3包中。命令中-qf是-q -f的縮寫,當選項僅帶一個減號時,多個選項可以合并在一起,如-a -b -c三個選項可寫作-abc,執(zhí)行效果相同。 (4) ——whatrequires : 查詢有哪些包需要指定功能 本選項指示RPM從所有已安裝的軟件包中,查詢有哪些軟件包提供了用戶指定的功能,命令行上可輸入一個或多個功能。
注: 本例從系統(tǒng)中查詢哪些軟件包需要/bin/ps和libc.so.6功能,通過管道輸出前10行內容。 (5) ——whatprovides : 查詢有哪些包提供指定功能 本選項指示RPM從所有已安裝的軟件包中,查詢有哪些軟件包提供了用戶指定的功能。命令行上可輸入一個或多個功能。
注: 本例從系統(tǒng)中查詢有哪些軟件包提供libc.so.6與/bin/ps功能,結果是glibc-2.1.2-12包提供了libc.so.6,而沒有包提供/bin/ps功能。 (6) ——triggeredby : 查詢有哪些包被指定的包觸發(fā)本選項指示RPM從所有已安裝的軟件包中,查詢有哪些包可被用戶指定的包觸發(fā)。指定的包可輸入一個或多個。
注: 本例查詢后得知,安裝或卸載foo-8.0-1包,將會觸發(fā)與file包相關的腳本程序執(zhí)行。 2. 查詢未安裝的軟件包: (僅有一個選項可用) (1) -p : 查詢指定包裹文件的信息 使用本選項,通過指定一個或多個包裹文件名,RPM就可以獲取相應包裹的有關信息。包裹文件可以是一般形式,也可是ftp/http形式。
注: 本例查詢ftp形式的包裹,顯示其文件列表(-l選項使然,下面要講到)。ftp用戶名zzz,密碼為pass,遠程機為linux,文件名為/zhsoft/file-3.26-6.i386.rpm,ftp使用2121端口。 二、信息顯示類 本類選項可同時選擇多個,以顯示多種信息。 1. -i : 顯示軟件包信息 當用戶需要了解軟件包的頭部信息時,要使用該選項。
上述輸出中,包含多個域,各個域的含義為:
2. -l (或——list) : 顯示軟件包文件列表 當用戶想知道軟件包包含哪些文件時,要使用該選項。輸出時,一行一個文件名,形成文 件列表。下例列出file包中文件:
注: 本例列文件時選用了通用選項-v,這樣列出的格式同ls命令列出的格式,從中可以看到各個文件的權限,屬主,屬組,大小,最后修改時間及文件名等信息。 3. -d (或——docfiles) : 顯示軟件包說明文檔RPM將軟件包中的文件分為三類,一是配置文件,一是說明文檔,再一是其它文件(包括可執(zhí)行程序及數(shù)據(jù)文件等)。通過-d選項,可列出包中所有說明文檔。下例列出file包中說明文檔:
4. -c (或——configfiles) : 顯示軟件包配置文件使用本選項可列出包中所有配置文件。下例列出lze包中的配置文件:
5. -s (或——state) : 顯示軟件包文件狀態(tài)RPM已安裝的軟件包中各個文件可擁有如下4種狀態(tài): * normal(正常): 這表明文件未被其它軟件包修改過。 * replaced(已替換): 這表明文件已被其它軟件包修改替換過了,不再是原先的文件了。* not installed(未安裝): 這表明文件未安裝。有一種原因可導致這種情況發(fā)生,這就是當安裝軟件包時使用了——excludedocs選項(或是通過設置%_excludedocs宏為1),說明文檔未被安裝到系統(tǒng)中。當用RPM查詢此軟件包狀態(tài)時,所有說明文檔均顯示此狀態(tài)。 * net shared(網(wǎng)絡共享): 這表明文件處于網(wǎng)絡共享狀態(tài)。這一狀態(tài)是RPM用來支持NFS(網(wǎng)絡文件系統(tǒng))的,用于避免一個NFS客戶端系統(tǒng)刪除一個正在共享的文件時,另一NFS客戶端系統(tǒng)無法正常使用含此文件的軟件包。有兩種情況可使文件在此狀態(tài),一是文件安裝在真實網(wǎng)絡共享的目錄里,二是文件安裝在RPM資源配置文件中%_netsharedpath宏所確定的目錄里。
注: 本例先安裝file包裹文件,選用——excludedocs表明不安裝說明文檔。而后再查詢file包文件的狀態(tài),可以看到其說明文檔均為not installed(未安裝),其它文件為normal(正常)狀態(tài)。 6. -R (或——requires) : 顯示軟件包所需的功能 所謂功能,可以是軟件包標識,可以是文件(如共享庫libc.so.6等),也可以是虛擬的名字。軟件包的依賴關系,就是依靠功能來實現(xiàn)的。RPM安裝軟件包時,如果所需功能不存在,則其依賴關系不滿足,RPM將中斷安裝過程。
注: 本例查詢lze包所需的功能。 7. ——provides : 顯示軟件包提供的功能 一個軟件包,可以提供若干功能,這些功能可以是動態(tài)鏈接庫等實際的文件,也可以是虛擬的名字(只要其它軟件包可以用就行了)。如果想查詢某個包提供了哪些功能,要用——provides 選項。 下面的例子查詢一個包裹文件所提供的功能:
注: 本包裹文件提供的功能是libz.so.1動態(tài)鏈接庫。 8. ——conflicts : 顯示軟件包沖突的功能 何謂沖突?沖突就是不同軟件包之間不能共存的現(xiàn)象。RPM制作軟件包時,可以記錄下與本軟件包不能共存的功能,這樣安裝該包時,若沖突的功能已然存在,則RPM將中止安裝。 下面的例子查詢at-3.1.7-8包是否有與其沖突的功能:
注: 本例顯示at包與版本號小于1.5的crontabs包有沖突存在。 9. ——scripts : 顯示軟件包內置的腳本程序 scripts即腳本,指的是用SHELL語言編寫的程序。選用本選項時,RPM將輸出軟件包所含的各類腳本程序的內容??偣灿?類這樣的腳本程序,即安裝前腳本程序(preinstall),安裝后腳本程序(postinstall),卸載前腳本程序(preuninstall),卸載后腳本程序(postuninstall)和校驗腳本程序(verify)。 下面的例子列出zsh包的腳本程序:
注: 本例利用管道技術給查詢的每行輸出加上了行號,便于觀察解釋。 第2-8行: 為安裝后腳本程序(postinstall)的源代碼; 第10-13行: 為卸載前腳本程序(preuninstall)的源代碼; 第15-23行: 為卸載后腳本程序(postuninstall)的源代碼。 例中所有腳本程序均通過/bin/sh解釋執(zhí)行,本例沒有安裝前腳本程序(preinstall)和 校驗腳本程序(verify)。 10. ——triggers : 顯示軟件包內置的觸發(fā)腳本程序 觸發(fā)腳本程序是scripts類腳本程序的擴展,它用于軟件包之間的交互控制。觸發(fā)腳本 程序有安裝時觸發(fā)腳本程序(triggerin),卸載前觸發(fā)腳本程序(triggerun)和卸載后觸發(fā)腳 本程序(triggerpostun)三種。 下面的例子列出zsh包中的觸發(fā)腳本程序:
注: 輸出的第1行說明腳本程序的類別(為卸載后觸發(fā)腳本程序triggerpostun),用什么程序解釋(一般為/bin/sh),和觸發(fā)的條件(在——之后描述)。本例的觸發(fā)條件為zsh的版本小于或等于3.0.7-2。如果條件成立,則此腳本程序將會執(zhí)行。 輸出的第2-6行為卸載后觸發(fā)腳本程序的源代碼。 11. ——changelog : 顯示軟件維護記錄 changelog即軟件維護記錄,用它來記錄什么人,什么時間,改動了軟件的什么地方。通 過查看維護記錄,開發(fā)者或用戶可以了解軟件的開發(fā)進展情況。 下面的例子查詢lze包的維護情況:
注: 從本例中就可以看出來,維護記錄的書寫有一定的規(guī)范:以星號(*)開頭的行記錄維護時間,維護人及其電子郵箱,而以減號(-)開頭的行則記錄維護的具體內容。 12. ——dump : 顯示軟件包中所有文件的屬性信息 如果用戶想查看某個軟件包內文件的屬性信息,請用——dump選項。
現(xiàn)在根據(jù)例子的輸出,解釋一下RPM包中各個文件所擁有的屬性信息:(以第1行為例) /usr/bin/file : 為文件名; 23948 : 指文件大小(字節(jié)數(shù)); 922138347 : 指文件最后修改時間(秒數(shù)); abaf6cfd51588ac7c484526fbdb84e5b : 指根據(jù)文件內容計算出的MD5檢查和; 0100755 : 指文件存取權限; root : 指文件屬主; root : 指文件屬組; 0 : 配置文件標志,為0表示該文件非配置文件,為1表明該文件是配置文件; 0 : 說明文檔標志,為0表示該文件非說明文檔,為1表明該文件是說明文檔; 0 : 指文件類型,為0表示普通文件,非0表示設備文件,包含主從設備號; X : 符號連接內容,如果文件不是符號連接,則此值為X。 三、定制輸出類 定制輸出是RPM一項強有力的功能,當用戶想要RPM按自己的格式輸出軟件包信息時,可以通過使用——qf(或——queryformat)選項來實現(xiàn)定制。 定制輸出要指定格式化的字符串(類似printf的格式串),該字符串以單引號‘或雙引號"引住。格式串中可包括普通文本,含轉義符的文本,功能標簽和數(shù)組循環(huán)三種不同的組件。 * 普通文本 格式串中的普通文本將按原樣輸出。 * 含轉義符的文本 RPM定義的轉義符為\,稱作反斜杠。當RPM遇到此字符時,會根據(jù)預先定義的轉義序列,把后面的字符解釋后輸出。 轉義序列如下:
* 功能標簽 RPM內置了很多功能標簽,如NAME表示軟件名,VERSION表示版本號,RELEASE表示釋出號等。輸出功能標簽所表示的內容時,需用這樣一種格式: %[輸出寬度]{功能標簽} 注:輸出寬度可選,正值表示右對齊輸出,負值表示左對齊輸出。 如格式串中使用%{NAME}時將輸出軟件名,使用%20{NAME}時則右對齊輸出軟件名,寬度為20,而使用%-20{NAME}時則按寬度為20左對齊輸出軟件名??纯聪旅娴膶嶋H例子就會明白:
功能標簽書寫不區(qū)分大小寫,即NAME也可輸作name,Name等等。功能標簽還可以帶有選項,選項用":選項名"表示,選項名有大小寫之分。如%{FILEMODES}默認以數(shù)字形式輸出,如采用perms選項,即%{FILEMODES:perms},輸出結果將采用rwx的形式。請看下面的例子:
注: %{filenames}表示包中的文件名。 RPM常用功能標簽表 注: 可用rpm ——querytags命令查到RPM內置的所有功能標簽。 * 數(shù)組循環(huán) 對于功能標簽是數(shù)組的,可以用數(shù)組循環(huán)(用[與]括住的部分)來輸出數(shù)組的全部內容。數(shù)組循環(huán)內部可包含功能標簽,普通文本和含轉義符的文本。RPM將根據(jù)循環(huán)內部一個或多個數(shù)組類型的功能標簽所擁有的單元個數(shù),取其最小值,循環(huán)同樣次數(shù),輸出解釋或轉義后的數(shù)據(jù)。對于功能標簽僅含一個單元的,若想輸出多次,則需要在功能標簽前面加個等號(=)。 下面的例子以數(shù)組循環(huán)的方式,輸出file包所含的各個文件的文件名及權限,同時輸出每一個文件時都要先輸出軟件包標識。
通過使用定制輸出,我們可以很方便地查找出系統(tǒng)中占用空間最大的軟件包。
注: -a項選擇所有已安裝的軟件包,——qf項定制查詢格式, 格式串中用功能標簽NAME輸出軟件名,用SIZE輸出軟件大小,查詢得到的數(shù)據(jù)通過管道送sort命令,對第2列降序排序后由head命令取第1行內容,這即是占用空間最大的軟件包。 |
|
|