- Linux服務(wù)器配置與管理完全學(xué)習(xí)手冊
- 王健
- 6549字
- 2021-03-19 15:14:43
5.2 RPM包的安裝方式
為了方便Linux用戶添加和刪除軟件,Red Hat公司提供了軟件包管理器RPM(RedHat Packet Manager),由于它的出現(xiàn)使得在Linux中安裝、卸載應(yīng)用程序變得相對簡單。RPM是一種已經(jīng)編譯并封裝好的軟件包,用戶可以直接安裝使用。默認情況下(即不出現(xiàn)文件依賴問題)用戶只需雙擊rpm軟件包,系統(tǒng)會自動進行安裝。通過RPM,用戶可以更加輕松方便地管理系統(tǒng)中的所有軟件。RPM軟件包只能在使用RPM機制的Linux操作系統(tǒng)中使用,如RHEL、Fdeora、Suse等。在Linux系統(tǒng)中,還有另外一種名為DEB的軟件包管理機制,可以在Debian、Ubuntu等系統(tǒng)中使用。相比較而言,還是RPM安裝包的應(yīng)用更為廣泛,基本上已成為Linux系統(tǒng)軟件安裝包事實上的標準。
5.2.1 RPM包管理工具介紹
RPM包的管理功能類似于Windows下的“添加/刪除程序”,但是功能卻比“添加/刪除程序”強大很多。在Linux的系統(tǒng)安裝光盤中,有很多以“.rpm”結(jié)尾的包文件,這些包文件就是RPM文件。每個RPM文件包含了已經(jīng)編譯好的二進制可執(zhí)行文件,其實就是將軟件源碼文件進行編譯安裝,然后進行封裝,類似于Windows安裝包中的“.exe”文件。此外RPM文件中還包含了運行可執(zhí)行文件所需的其他文件,這點也和Windows下的軟件包類似。Windows程序的安裝包中,除了“exe”可執(zhí)行文件外,還有其他依賴運行的文件。
一個RPM包文件是能夠讓應(yīng)用軟件運行的全部文件的集合,它記錄了二進制軟件的內(nèi)容、安裝的位置、軟件包的描述信息、軟件包之間的依賴關(guān)系等信息。RPM工具對系統(tǒng)中全部RPM軟件包進行全面管理,因此能夠記住用戶添加了什么以及這些軟件每個文件的具體安裝路徑,以便用戶進行完全、徹底地刪除。一般來說,RPM軟件包發(fā)布的軟件比需要手工編譯的軟件容易安裝和維護,但是有些RPM軟件包需要大量的依賴包。
RPM包管理方式的優(yōu)點是安裝簡單方便,因為軟件已經(jīng)編譯完成并打包,安裝只是個驗證環(huán)境和解壓的過程。此外,通過RPM方式安裝的軟件,RPM工具都會記錄軟件的安裝信息,這樣便于軟件日后的查詢、升級和卸載。RPM包管理方式的缺點是對操作系統(tǒng)環(huán)境的依賴性很大,它要求RPM包的安裝環(huán)境必須與RPM包封裝時的環(huán)境相一致或相當(dāng)。還需要滿足安裝時與系統(tǒng)某些軟件包的依賴關(guān)系。例如需要安裝A軟件,但是A軟件需要系統(tǒng)有B和C軟件的支持,那么就必須先安裝B和C軟件,然后才能安裝A軟件。這也是用戶在使用RPM包方式安裝軟件需要特別注意的地方。
5.2.2 RPM包種類和組成
RPM軟件包是將源代碼經(jīng)過編譯和封裝以后形成的包文件,其中封裝有軟件程序、配置文件、幫助手冊等組件。RPM包的封裝格式一般有兩種:RPM和SRPM,SRPM包包含了編譯時的源碼文件和一些編譯指定的參數(shù)文件,在使用的時候需要重新進行編譯,通常SRPM對應(yīng)的RPM文件類似與“xxxxxxxx.src.rpm”格式。下面以vsftpd-2.2.2- 11.el6.i686.rpm為例,講述一下RPM包對應(yīng)的文件名含義。
vsftpd:軟件名稱。
2.2.2:版本號。
11.el6:發(fā)布號,更新發(fā)布號主要是對軟件存在的bug或漏洞進行了修補,在軟件功能上并沒有增強,el6是指在RHEL6系統(tǒng)中發(fā)布。
i686:硬件平臺,其中x86_64是指64位的PC架構(gòu),i386或i686等都是指32位的PC架構(gòu),noarch是指不區(qū)分硬件架構(gòu)。
rpm:擴展名。
注意 RHEL6系統(tǒng)中所有的內(nèi)置軟件都以RPM軟件包的形式存儲在系統(tǒng)光盤packages子目錄中。
對于RPM包的五個組成部分,下面詳細介紹它們的含義和異同。
軟件名稱:是對軟件包的標識。
軟件的版本號:每個軟件都有自己的版本號,版本號可以說明軟件從開始到現(xiàn)在發(fā)行了多少、軟件是否是新的等等。
軟件更新發(fā)行次數(shù):由于一個版本的軟件在發(fā)行后可能出現(xiàn)bug或者漏洞,需要修復(fù)和重新封裝。每修復(fù)封裝一次,軟件的名稱就要更新一次。
適合的硬件平臺:由于RPM包要在各種不同的Linux硬件平臺上使用,但是每個不同的硬件平臺RPM打包封裝的參數(shù)不同,這樣就出現(xiàn)了i386、i686、x86_64、noarch等平臺名稱標識。i386指這個軟件包適用于intel 80386以后的x86架構(gòu)的計算機;i686指這個軟件包適用于intel 80686以后(奔騰pro以上)的x86架構(gòu)的計算機;x86_64指這個軟件包適用于x86架構(gòu)64位處理器的計算機。noarch表示這個軟件包與硬件構(gòu)架無關(guān),可以通用。
RPM軟件包標識:RPM軟件包標識用于指明此文件是rpm格式的文件,一般以兩種后綴來標識,分別以“.rpm”結(jié)尾和以“.src.rpm”結(jié)尾。
i386軟件包可以在任意x86平臺下使用,無論是i686或是x86_64的計算機都可以。但是i686的軟件包不一定能在i386硬件上面使用,這是由于i686軟件包一般都是對cpu進行了優(yōu)化,具有向后兼容性,而不具有向前兼容的特性。
5.2.3 RPM軟件包的使用
RPM的使用分為安裝、查詢、驗證、更新、刪除等操作,RPM軟件的安裝、刪除和更新只有擁有root權(quán)限才能使用,對于查詢功能則任何用戶都可以操作。如果普通用戶擁有安裝目錄的權(quán)限,也可以進行安裝,下面分別來介紹。
1.安裝軟件包
命令格式如下。
rpm -i [輔助選項] file1.rpm file2.rpm…fileN.rpm
主選項說明如下。
-i:是install的意思,就是安裝軟件,也可以使用“--install”。
參數(shù)說明:
file1.rpm file2.rpm…fileN.rpm是指定將要安裝RPM包的文件名,可以多個文件一起安裝。
輔助選項說明。這里的選項很多,只列出常用選項,詳細解釋如下。
-v:顯示附加信息。
-h:安裝時輸出標記“#”。
--test:只對安裝進行測試,并不實際安裝。
--nodeps:不檢查軟件之間的依賴關(guān)系,加入此選項可能會導(dǎo)致軟件不可用。
--force:忽略軟件包以及軟件沖突。
--replacepkgs:強制重新安裝已經(jīng)安裝的軟件包。
--prefix:將軟件包安裝到指定的路徑下。
--percent:以百分比的形式輸出安裝的進度。
--excludedocs:不安裝軟件包中的說明文件。
--includedocs:安裝軟件包,包含說明文件。
其中,常用參數(shù)如表5-1所示。如果有依賴關(guān)系的,要解決依賴關(guān)系。其實軟件包管理器一般都能很好地解決依賴關(guān)系,如果在軟件包管理器中也找不到有依賴關(guān)系的包,那只能通過編譯它所依賴的包來解決依賴關(guān)系,或者強制安裝。
表5-1 RPM軟件包安裝參數(shù)說明

安裝過程示例如圖5-4所示。

圖5-4 RPM軟件包安裝
【例5-4】安裝ipvsadm-1.24-6.i386.rpm包。
安裝ipvsadm-1.24-6.i386.rpm可使用下面的命令。
[root@localhost ~]# rpm -ivh ipvsadm-1.24-6.i386.rpm
執(zhí)行結(jié)果如下。
warning:ipvsadm-1.24-6.i386.rpm:V3 DSA signature: NOKEY, key ID 44e181 Preparing... ############################ [100%] 1:ipvsadm ############################[100%]
【例5-5】安裝gcc-3.4.4-2.i386.rpm包。
下面的操作為安裝gcc-3.4.4-2.i386.rpm包的過程。在安裝過程中,出現(xiàn)了安裝包依賴問題。安裝命令如下。
[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm
執(zhí)行結(jié)果如下。
warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e error: Failed dependencies: glibc-devel >= 2.2.90-12 is needed by gcc-3.4.4-2.i386 Suggested resolutions: glibc-devel-2.3.4-2.13.i386.rpm
提示在安裝gcc編譯器之前需要glibc-devel包的支持,這個包詳細的版本是glibc-devel-2.3.4-2.13.i386.rpm,因此,需要先安裝這個軟件包。
[root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm
執(zhí)行結(jié)果如下。
warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e error: Failed dependencies: glibc-headers is needed by glibc-devel-2.3.4-2.13.i386 glibc-headers = 2.3.4-2.13 is needed by glibc-devel-2.3.4-2.13.i386 Suggested resolutions: glibc-headers-2.3.4-2.13.i386.rpm
這里又出現(xiàn)了依賴關(guān)系。上面的錯誤提示安裝glibc-devel包需要先安裝glibc-headers軟件包,并且給出了安裝建議版本,于是要先安裝glibc-headers包。
[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm
執(zhí)行結(jié)果如下。
warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e error: Failed dependencies: kernel-headers is needed by glibc-headers-2.3.4-2.13.i386 kernel-headers >= 2.2.1 is needed by glibc-headers-2.3.4-2.13.i386 Suggested resolutions: glibc-kernheaders-2.4-9.1.98.EL.i386.rpm
依然報錯,信息與上面相同,意思是說在安裝kernel-headers包之前,需要glibc-kernheaders包的支持,并且給出了建議版本,于是接著安裝glibc-kernheaders包。
[root@server ~]# rpm -ivh glibc-kernheaders-2.4-9.1.98.EL.i386.rpm
執(zhí)行結(jié)果如下。
warning: glibc-kernheaders-2.4-9.1.98.EL.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################### [100%] 1:glibc-kernheaders ###################### [100%]
這次依賴終于解除了,按照相反的順序開始安裝,安裝步驟如下。
[root@server ~]# rpm -ivh glibc-headers-2.3.4-2.13.i386.rpm warning: glibc-headers-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################### [100%] 1:glibc-headers ######################## [100%] [root@server ~]# rpm -ivh glibc-devel-2.3.4-2.13.i386.rpm warning: glibc-devel-2.3.4-2.13.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ########################### [100%] 1:glibc-devel ######################## [100%] [root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ############################## [100%] 1:gcc ########################### [100%]
在本例中,若在安裝gcc中加入“--nodeps”參數(shù),由于不檢查依賴關(guān)系,可一次安裝成功。
[root@server ~]# rpm -ivh gcc-3.4.4-2.i386.rpm --nodeps
執(zhí)行結(jié)果如下。
warning: gcc-3.4.4-2.i386.rpm: V3 DSA signature: NOKEY, key ID db42a60e Preparing... ############################## [100%] 1:gcc ########################### [100%]
這里加入了忽略依賴關(guān)系的參數(shù),雖然可以安裝成功,但是不建議這么做,因為這樣安裝的軟件很可能不可用,或者使用過程中會出現(xiàn)問題。因此,除非確切知道忽略依賴關(guān)系對軟件本身沒有影響,才可使用此參數(shù)。
【例5-6】以my-package.src.rpm名稱為例,安裝xxxxxx.src.rpm。
利用xxxx.src.rpm格式的包安裝rsh軟件,操作方法如下。
[root@localhost ~]# rpm -i rsh-0.17-25.3.src.rpm [root@localhost ~]#cd /usr/src/redhat/SPECS/rsh.spec [root@localhost SPECS]#rpmbuild -bb rsh.spec [root@localhost SPECS]# cd /usr/src/redhat/RPMS/i386/ rsh-0.17-25.3.i386.rpm rsh-debuginfo-0.17-25.3.i386.rpm rsh-server-0.17-25.3.i386.rpm [root@localhost i386]#rpm -ivh rsh-* Preparing... ############################ [100%] 1:rsh-server ########################## [33%] 2:rsh ############################## [67%] 3:rsh-debuginfo ######################## [100%] [root@localhost i386]#
2.查詢軟件包
RPM的查詢功能極為強大,是極為重要的功能之一。
命令格式如下。
rpm -q [輔助選項] package1…packageN
主選項說明如下。
-q:查詢功能,也可以使用“--query”。
參數(shù)說明:package1…packageN為已經(jīng)安裝的軟件包名稱。
【例5-7】查詢系統(tǒng)是否安裝了gaim。
命令如下。
[root@localhost]# rpm -q gaim gaim-1.3.0-1.fc4
此命令用于查詢系統(tǒng)是否安裝了gaim。如果已安裝會輸出相關(guān)輸出信息;如果沒有安裝,會輸出gaim沒有安裝的信息。
查看系統(tǒng)中所有已經(jīng)安裝的包,要加-a參數(shù):
[root@localhost RPMS]# rpm -qa
如果分頁查看,應(yīng)再加一個管道命令|和more命令。
[root@localhost RPMS]# rpm –qa|more
在所有已經(jīng)安裝的軟件包中查找某個軟件,比如gaim,可以用grep抽取出來。
[root@localhost RPMS]# rpm -qa |grep gaim
rpm命令的輔助選項說明如下。
-f:查詢操作系統(tǒng)中某個文件屬于對應(yīng)的哪個rpm軟件包。
文件名所在的絕對路徑要指出。
【例5-8】查詢/bin/bash屬于哪個rpm軟件包。
命令如下。
[root@localhost ~]# rpm -qf /bin/bash bash-3.0-19.2
-p:查詢以“.rpm”為后綴的軟件包安裝后對應(yīng)的包名稱。
【例5-9】查詢gcc-3.4.4-2.i386安裝到系統(tǒng)后對應(yīng)的包名。
[root@server ~]# rpm -qp gcc-3.4.4-2.i386.rpm gcc-3.4.4-2
從這里的查詢可以得知,將gcc-3.4.4-2.i386.rpm安裝到系統(tǒng)以后,對應(yīng)的包名為gcc-3.4.4-2。
-l:顯示軟件包中的所有文件列表。
此選項后面跟軟件包安裝后對應(yīng)的包名,切記不是以“.rpm”為后綴的rpm包。
【例5-10】查詢gcc-3.4.4-2軟件包所包含的文件列表。
命令如下。
[root@server ~]# rpm –ql gcc-3.4.4-2 /usr/bin/c89 /usr/bin/c99 /usr/bin/cc /usr/bin/gcc /usr/bin/gcov ………(以下省略)………
-i:顯示軟件包的概要信息,例如軟件名稱、版本、適應(yīng)平臺、大小等等。
同上,此選項后面跟軟件包安裝后對應(yīng)的包名,切記不是以“.rpm”為后綴的rpm包。
【例5-11】查詢gcc-3.4.4-2.i386軟件包的描述信息。
可以使用以下命令。
[root@server ~]# rpm -qi gcc-3.4.4-2.i386
或者
[root@server ~]# rpm -qpi gcc-3.4.4-2.i386.rpm
選項說明如下。
這里由于利用“-p”選項顯示出了安裝后的軟件包名,所以“-i”選項后可跟“.rpm”結(jié)尾的軟件包。
-g:查詢系統(tǒng)中有哪些軟件包屬于指定的類別。RPM工具根據(jù)軟件功能的不同,將軟件分為多種,分別如下,括號內(nèi)為說明。
Amusements/Games(娛樂/游戲)
Amusements/Graphics(娛樂/圖形)
Applications/Archiving(應(yīng)用/檔案)
Applications/Communications(應(yīng)用/通訊)
Applications/Databases(應(yīng)用/數(shù)據(jù)庫)
Applications/Editors(應(yīng)用/編輯器)
Applications/Emulators(應(yīng)用/仿真器)
Applications/Engineering(應(yīng)用/工程)
Applications/File(應(yīng)用/文件)
Applications/Internet(應(yīng)用/因特網(wǎng))
Applications/Multimedia(應(yīng)用/多媒體)
Applications/Productivity(應(yīng)用/產(chǎn)品)
Applications/Publishing(應(yīng)用/印刷)
Applications/System(應(yīng)用/系統(tǒng))
Applications/Text(應(yīng)用/文本)
Development/Debuggers(開發(fā)/調(diào)試器)
Development/Languages(開發(fā)/語言)
Development/Libraries(開發(fā)/函數(shù)庫)
Development/System(開發(fā)/系統(tǒng))
Development/Tools(開發(fā)/工具)
Documentation(說明文檔)
System Environment/Base(系統(tǒng)環(huán)境/基礎(chǔ))
System Environment/Daemons(系統(tǒng)環(huán)境/守護)
System Environment/Kernel(系統(tǒng)環(huán)境/內(nèi)核)
System Environment/Libraries(系統(tǒng)環(huán)境/函數(shù)庫)
System Environment/Shells(系統(tǒng)環(huán)境/接口)
User Interface/Desktops(用戶界面/桌面)
User Interface/X(用戶界面/X窗口)
User Interface/X Hardware Support(用戶界面/X硬件支持)
【例5-12】查詢當(dāng)前系統(tǒng)屬于“開發(fā)/調(diào)試器”類別的包有哪些。
命令如下。
[root@server ~]# rpm -qg "Development/Debuggers" lsof-4.72-1.1 crash-4.0-2 sysreport-1.3.15-5 ltrace-0.3.36-2.EL4 strace-4.5.13-0.EL4.1 valgrind-2.2.0-5.EL4 valgrind-callgrind-0.9.9-1 gdb-6.3.0.0-1.63 pstack-1.2-6
-d:顯示軟件包中的說明文件列表。RPM將軟件包中的文件分為三類,一類是配置文件,一類是說明文件,還有一類是可執(zhí)行文件。文件類型后面跟完整包名,切記不是以“.rpm”為后綴的rpm包。
【例5-13】查詢file軟件包中的說明文件。
命令如下。
[root@server108 cicro]# rpm -qd file-4.10-2 /usr/share/doc/file-4.10/LEGAL.NOTICE /usr/share/doc/file-4.10/README /usr/share/man/man1/file.1.gz /usr/share/man/man3/libmagic.3.gz /usr/share/man/man5/magic.5.gz
-s:與“-l”選項類似,除了顯示軟件包中的所有文件列表信息,還顯示每個文件的狀態(tài)。RPM已安裝的軟件包中,文件擁有四種狀態(tài),分別是normal(正常狀態(tài),表示文件沒有被其他軟件包修改過)、not installed(未安裝狀態(tài),表示文件沒有安裝)、replaced(已替換狀態(tài),表明此文件已經(jīng)被其他軟件包修改替換過)、net shared(網(wǎng)絡(luò)共享狀態(tài),表示此文件處于網(wǎng)絡(luò)共享狀態(tài))。
【例5-14】查詢ipvsadm-1.24-6包中每個文件的狀態(tài)。
命令如下。
[root@localhost ~]# rpm -i --excludedocs ipvsadm-1.24-6.i386.rpm [root@localhost ~]# rpm -qs ipvsadm-1.24-6 normal /etc/rc.d/init.d/ipvsadm normal /sbin/ipvsadm normal /sbin/ipvsadm-restore normal /sbin/ipvsadm-save not installed /usr/share/doc/ipvsadm-1.24 not installed /usr/share/doc/ipvsadm-1.24/README not installed /usr/share/man/man8/ipvsadm-restore.8.gz not installed /usr/share/man/man8/ipvsadm-save.8.gz not installed /usr/share/man/man8/ipvsadm.8.gz
從上面可以看到,在安裝ipvsadm-1.24-6.i386.rpm的時候指定不安裝說明文檔,然后通過“-s”命令查看文件狀態(tài)時,軟件包的說明文檔狀態(tài)均為“not installed”。
-R (或--requires):顯示軟件包所需的功能。所謂功能,可以是軟件包標識,也可以是共享動態(tài)庫文件等。軟件包的依賴關(guān)系就是依靠功能來實現(xiàn)的,如果所需的功能不存在,則依賴關(guān)系一定得不到滿足,軟件安裝就會失敗。
--provides:顯示軟件包提供的功能。這個功能可以是動態(tài)庫文件,也可以是虛擬軟件的包名等。
【例5-15】查詢nxclient-2.1.0-17.i386.rpm提供的功能。
命令如下。
[root@localhost ~]# rpm -qp --provides nxclient-2.1.0-17.i386.rpm nxclient = 2.1.0-17
可以看到這個軟件提供了nxclient的功能。
對于一個已經(jīng)安裝的軟件包,還可以把一系列的參數(shù)組合起來用,比如:rpm –qil。
【例5-16】查詢YUMex_0.42-3.0.fc4_noarch包的依賴關(guān)系。
命令如下。
[root@localhost archives]# rpm -qpR YUMex_0.42-3.0.fc4_noarch.rpm /bin/bash /usr/bin/python config(YUMex) = 0.42-3.0.fc4 pygtk2 pygtk2-libglade rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 usermode YUM >= 2.3.2
其中,常用的軟件包信息查看參數(shù)如表5-2所示。
表5-2 RPM軟件包信息查看參數(shù)說明

查看軟件是否安裝的界面如圖5-5所示。

圖5-5 查看軟件是否安裝
查看已安裝軟件信息的界面如圖5-6所示。

圖5-6 查看已安裝軟件信息
查詢已經(jīng)安裝的軟件包文件列表如圖5-7所示。

圖5-7 查詢已安裝軟件包文件列表
在Linux系統(tǒng)安裝應(yīng)用軟件時,會自動分門別類地向相應(yīng)的目錄中復(fù)制對應(yīng)的程序文件,并進行相關(guān)設(shè)置。典型的應(yīng)用程序通常由以下幾部分組成,具體如表5-3所示。
表5-3 應(yīng)用程序組成

查詢文件由哪個程序生成的界面如圖5-8所示。

圖5-8 查詢文件生成程序
當(dāng)系統(tǒng)中的某個程序文件損壞或丟失時,利用執(zhí)行“rpm -qf”命令后的查詢結(jié)果,可以重新安裝相應(yīng)的軟件包,如圖5-9所示。

圖5-9 程序文件損壞時重新安裝軟件包
安裝coreutils的時候提示已經(jīng)安裝,這時候需要使用參數(shù)--force強制重新安裝。重新安裝成功后使用touch命令時會提示無法創(chuàng)建,是只讀的文件系統(tǒng),這時候重啟系統(tǒng)就可以了。
查詢軟件包配置文件信息的界面如圖5-10所示。

圖5-10 查詢軟件包配置文件
3.驗證軟件包
軟件包在使用之前,可通過命令進行驗證,已確定是否正常安裝。
(1)驗證已經(jīng)安裝的軟件包
校驗是否已安裝軟件包,比較的是某軟件包安裝的文件和原始軟件包中的同一文件的信息是否一致。它校驗每個文件的大小、權(quán)限、MD5值、類型、所有者以及組群。
命令格式如下。
rpm -V [輔助選項] package1…packageN
主選項說明如下。
-V:verify的縮寫,也可以用“--verify”代替。此參數(shù)主要校驗已經(jīng)安裝的軟件包內(nèi)的文件和最初安裝時是否一致。
參數(shù)說明如下。
package1…packageN表示需要校驗的且已經(jīng)安裝的軟件包名。
輔助選項說明如下。
-p:驗證軟件包文件。
【例5-17】驗證rsh包的安裝狀態(tài)。
操作過程如下。
[root@localhost ~]# rpm -V rsh-0.17-25.3 package rsh-0.17-25.3 is not installed [root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e missing /usr/bin/rcp missing /usr/bin/rexec missing /usr/bin/rlogin missing /usr/bin/rsh missing d /usr/share/man/man1/rcp.1.gz missing d /usr/share/man/man1/rexec.1.gz missing d /usr/share/man/man1/rlogin.1.gz missing d /usr/share/man/man1/rsh.1.gz [root@localhost ~]# rpm -ivh rsh-0.17-25.3.i386.rpm warning: rsh-0.17-25.3.i386.rpm: V3 DSA signature: NOKEY, key ID db2a6e Preparing... ########################### [100%] 1:rsh ######################## [100%] [root@localhost ~]# rpm -Vp rsh-0.17-25.3.i386.rpm warning: rsh-0.17-25.3.i386.rpm:V3 DSA signature: NOKEY, key ID db2a6e [root@localhost ~]# rpm -V rsh-0.17-25.3
在上面的操作過程中,首先驗證了rsh,從結(jié)果可知rsh沒有在系統(tǒng)中安裝,接下來安裝rsh軟件包。當(dāng)再次查看rsh包狀態(tài)時,沒有任何輸出,表示軟件包文件全部正常。
-f:校驗文件在所屬軟件包中的狀態(tài)。此選項后面跟相應(yīng)的文件名。
【例5-18】檢驗mysqlclient包中各個文件的狀態(tài)。
操作過程如下。
[root@localhost ~]# rpm -ql mysqlclient10-3.23.58-4.RHEL4.1 /etc/ld.so.conf.d/mysqlclient10-i386.conf /usr/lib/mysql/libmysqlclient.so.10 /usr/lib/mysql/libmysqlclient.so.10.0.0 /usr/lib/mysql/libmysqlclient_r.so.10 /usr/lib/mysql/libmysqlclient_r.so.10.0.0 [root@localhost ~]# mv \ >/usr/lib/mysql/libmysqlclient.so.10 /usr/lib/mysql/libmysqlclient.so.10.d [root@localhost ~]# rpm –V mysqlclient10-3.23.58-4.RHEL4.1 missing /usr/lib/mysql/libmysqlclient_r.so.10 [root@localhost ~]# rpm -Vf /usr/lib/mysql/libmysqlclient_r.so.10 missing /usr/lib/mysql/libmysqlclient_r.so.10
這里首先檢查mysqlclient包中包含的所有文件,然后模擬刪除mysqlclient包中一個文件,然后查看這個文件的狀態(tài),可以看到顯示為“missing”。如果通過“-Vf”選項檢查某個文件,沒有任何輸出時,表示這個文件狀態(tài)正常。
-a:檢驗所有的軟件包。
-g:檢驗所有屬于組的軟件包。
(2)驗證未安裝的軟件包
發(fā)行的RPM格式的軟件包是否值得信任,是否損壞,可以通過RPM提供的選項進行驗證。RPM軟件包一般使用GNU隱私衛(wèi)士(或稱GPG)來簽名,從而幫助使用者確定下載軟件包的可信任性。
命令格式如下。
rpm -K file1.rpm…fileN.rpm
主選項說明如下。
-K:checksig的縮寫,也可以用“--checksig”。這個選項用來檢查RPM軟件包文件的md5校驗和GPG簽名。
參數(shù)說明:file1.rpm…fileN.rpm表示需要校驗軟件包名。
【例5-19】校驗nxserver-2.1.0-22.i386軟件包是否被篡改或損壞。
使用如下命令檢查。
[root@localhost ~]# rpm -K nxserver-2.1.0-22.i386.rpm nxserver-2.1.0-22.i386.rpm: md5 OK
這里的“md5 OK”表示文件在下載中沒有被損壞或者沒有被篡改,即這個文件是安全的。
[root@localhost ~]# rpm -K ipvsadm-1.24-6.i386.rpm pvsadm-1.24-6.i386.rpm: (SHA1) DSA sha1 md5 (GPG) NOT OK (MISSING KEYS: GPG#443e1821)
上面的輸出表示這個軟件沒有被授權(quán)簽名。在安裝未被Linux發(fā)行商授權(quán)的軟件包時,請務(wù)必謹慎,因為這些軟件包內(nèi)可能包含有害的代碼。
4.更新軟件包
命令格式如下。
rpm -U [輔助選項] file1.rpm…fileN.rpm
主選項說明如下。
-U:upgrade的縮寫,可以使用“--upgrade”代替。
參數(shù)說明:file1.rpm…fileN.rpm表示需要升級的rpm文件包。
輔助選項說明如下。
--oldpackage:表示允許“升級”到一個老版本,即軟件版本降級。
其他選項與安裝RPM軟件包輔助參數(shù)完全相同,這里不再贅述。
【例5-20】將rsh從rsh-0.17-25.3升級到rsh-0.17-37.el5。
操作步驟如下。
[root@localhost ~]# rpm -q rsh rsh-0.17-25.3 [root@localhost ~]# rpm -Uvh rsh-0.17-37.el5.i386.rpm warning: rsh-0.17-37.el5.i386.rpm: V3 DSA signature: NOKEY, key ID 37017186 Preparing... ######################### [100%] 1:rsh ########################### [100%] [root@localhost ~]# rpm -q rsh rsh-0.17-37.el5
5.刪除軟件包
命令格式如下。
rpm -e [輔助選項] package1…packageN
主選項說明如下。
-e:erase的縮寫,也可以用“--erase”代替。
參數(shù)說明:package1…packageN表示已經(jīng)安裝的軟件包名稱。
輔助選項說明如下。
--test:只執(zhí)行刪除的測試。
--nodeps:不檢查依賴性。
【例5-21】刪除rsh軟件包。
使用以下命令。
[root@localhost ~]# rpm -q rsh rsh-0.17-37.el5 [root@localhost ~]# rpm -e rsh-0.17-37.el5 [root@localhost ~]# rpm -q rsh package rsh is not installed
【例5-22】刪除gcc軟件包,但是存在依賴關(guān)系。
操作過程如下。
[root@server ~]# rpm -e gcc error: Failed dependencies: gcc = 3.4.4-2 is needed by (installed) gcc-c++-3.4.4-2.i386 gcc = 3.4.4-2 is needed by (installed) gcc-g77-3.4.4-2.i386 gcc = 3.4.4-2 is needed by (installed) gcc-java-3.4.4-2.i386 gcc = 3.4.3 is needed by (installed) libtool-1.5.6-4.EL4.1.i386 gcc is needed by (installed) systemtap-0.4-0.EL4.i386
這里又出現(xiàn)要求刪除依賴性的提示了。根據(jù)上面的提示可知,要刪除gcc軟件包,必須刪除與gcc相互依賴的五個軟件包。這個操作要非常慎重,除非知道刪除后對系統(tǒng)沒有影響,否則一定不要盲目執(zhí)行刪除操作,因為這樣可能導(dǎo)致系統(tǒng)的崩潰。其實這里也可以加入“--nodeps”參數(shù),忽略依賴關(guān)系,但是這樣可能會導(dǎo)致相關(guān)依賴軟件的不可用。
卸載軟件建議使用rpm,盡量不使用yum。因為yum卸載時候會把依賴的包一起卸載,可能導(dǎo)致其他軟件無法正常使用。
- Linux網(wǎng)絡(luò)管理與配置(第2版)
- Mastering ElasticSearch
- Instant Handlebars.js
- Extending Bootstrap
- Installing and Configuring Windows 10:70-698 Exam Guide
- 嵌入式實時操作系統(tǒng):RT-Thread設(shè)計與實現(xiàn)
- Linux內(nèi)核觀測技術(shù)BPF
- 無蘋果不生活 The New iPad隨身寶典
- Fedora 12 Linux應(yīng)用基礎(chǔ)
- 計算機系統(tǒng)的自主設(shè)計
- Hands-On UX Design for Developers
- AWS SysOps Cookbook
- Building Telephony Systems With Asterisk
- Linux操作系統(tǒng)案例教程(第2版)
- Linux深度攻略