對於Linux運維人員來講,軟件包管理無疑是一份很是重要的平常工做,只有輕車熟路的管理好軟件包,平常運維工做才能得以進行。在基於CentOS6或者紅帽6的平臺上,熟練運用RPM和yum來進行服務器軟件包管理,有着重要的意義。
java
利用rpm包管理器管理軟件
node
什麼是rpm?
算法
rpm是紅帽自主研發的一款軟件包管理器,早起的rpm被稱爲Red hat package Manager,然後成爲了Linux界軟件包管理器的標準,因此如今的rpm是由RPM Package Manager的遞歸縮寫,如今不止是在紅帽系列系統上使用,還能夠在其餘發行版的Linux系統上使用,如Open SUSE。apache
rpm使用方式
centos
軟件包管理就是對軟件包進行安裝、卸載、升級、查詢等,這些均可以使用rpm來完成,如下將對使用rpm進行軟件包安裝的經常使用方式作說明。
tomcat
安裝
bash
rpm -i|--install [install-options] PACKAGES_FILE1...服務器
[install-options]
運維
-v|-vv|-vvv:詳細顯示安裝過程,v越多其越詳細ide
-h:以#方式顯示安裝進度,一個#表明安裝已完成2%
例1:安裝zsh-4.3.10-7.el6.x86_64.rpm並顯示其安裝過程和進度
[root@test Packages]# rpm -ivh zsh-4.3.10-7.el6.x86_64.rpm Preparing... ########################################### [100%] 1:zsh ########################################### [100%] [root@test Packages]#
--test:測試安裝,即只是測試其是否能安裝成功,而不真正地把軟件包安裝上
例2:測試安裝tree-1.5.3-2.el6.x86_64.rpm
[root@test Packages]# rpm --test -ivh tree-1.5.3-2.el6.x86_64.rpm Preparing... ########################################### [100%] #只執行完Preparing,而不真正執行安裝過程
--nodeps:安裝時忽略依賴關係
例3:安裝tomcat6-6.0.24-80.el6.x86_64.rpm
[root@test Packages]# rpm -ivh tomcat6-6.0.24-80.el6.x86_64.rpm error: Failed dependencies: /lib/lsb/init-functions is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-collections is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-daemon is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-dbcp is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-logging is needed by tomcat6-0:6.0.24-80.el6.x86_64 jakarta-commons-pool is needed by tomcat6-0:6.0.24-80.el6.x86_64 java is needed by tomcat6-0:6.0.24-80.el6.x86_64 jpackage-utils is needed by tomcat6-0:6.0.24-80.el6.x86_64 log4j is needed by tomcat6-0:6.0.24-80.el6.x86_64 mx4j is needed by tomcat6-0:6.0.24-80.el6.x86_64 tomcat6-lib = 0:6.0.24-80.el6 is needed by tomcat6-0:6.0.24-80.el6.x86_64 #常規安裝會在檢查後報錯,提示有依賴關係,此時就不能正常安裝
[root@test Packages]# rpm -ivh --nodeps tomcat6-6.0.24-80.el6.x86_64.rpm Preparing... ########################################### [100%] 1:tomcat6 ########################################### [100%] #使用--nodeps忽略其依賴關係
--replacepkgs:從新安裝(覆蓋原有文件安裝)
例4:覆蓋安裝當前已經安裝過的tree-1.5.3-2.el6.x86_64.rpm
[root@test Packages]# rpm -ivh --replacepkgs tree-1.5.3-2.el6.x86_64.rpm
Preparing... ########################################### [100%]
1:tree ########################################### [100%]
如下選項不是常常用,不舉例介紹
--force:強制安裝(升級程序包時包之間有衝突,可強制使用此選項安裝,)
--oldpackage:降級安裝,即所要安裝的包比當前系統上已安裝的版本古老
--relocate:從新把包安裝的路徑
--replacefiles:安裝時替換部分文件
--feplacepkgs:安裝時替換相關的包
升級
rpm {-U|--upgrade} [install-options] PACKAGE_FILE...
升級或安裝
rpm {-F|--freshen} [install-options] PACKAGE_FILE
只是升級,若沒安裝則不去安裝
例5:升級或安裝tree包
查看當前系統上所安裝的tree(後面會補充)
[root@dsl-189-172-5-105-dyn tmp]# rpm -q tree tree-1.5.0-4.x86_64
使用新版本包升級
[root@dsl-189-172-5-105-dyn Packages]# rpm -U tree-1.5.3-2.el6.x86_64.rpm [root@dsl-189-172-5-105-dyn Packages]# rpm -q tree tree-1.5.3-2.el6.x86_64
卸載
rpm {-e|--erase} [--allmatches] [--nodeps] [--noscripts] [--notriggers] [--test] PACKAGE_NAME
--allmatches:若是程序包同時安裝多個版本,則此選項一次所有卸載之
--nodeps:卸載時若是存在依賴關係,則忽略依賴關係
--noscripts:卸載時不執行腳本
例6:卸載當前系統上所安zsh
[root@dsl-189-172-5-105-dyn Packages]# rpm -e zsh [root@dsl-189-172-5-105-dyn Packages]#
查詢
rpm {-q|--query} [select-options] [query-options]
[select-options]
1.查詢某包或某些包是否安裝
rpm -a PACKAGE_NAME
例7:查詢當前系統上是否已經安裝了vsftpd軟件包
[root@dsl-189-172-5-105-dyn Packages]# rpm -q vsftpd vsftpd-2.2.2-13.el6_6.1.x86_64
2.查詢已經安裝的全部包
rpm -qa
3.查詢某文件是由哪一個包安裝生成
rpm -qf /PATH/TO/SOMEFILE
例8:查詢/etc/smaba/smb.conf文件是由哪一個包安裝生成的。
[root@dsl-189-172-5-105-dyn Packages]# rpm -qf /etc/samba/smb.conf samba-common-3.6.23-12.el6.x86_64
4.查詢還沒有安裝的包文件的相關信息
rpm -qp+[query-options] PACKAGE_FILE
[query-options]:
1.查詢某包的簡要說明信息
rpm -qi PACKAGE_NAME
例9:查詢iptables包的簡要說明信息
[root@dsl-189-172-5-105-dyn Packages]# rpm -qi iptables Name : iptables Relocations: (not relocatable) Version : 1.4.7 Vendor: CentOS Release : 14.el6 Build Date: Wed 15 Oct 2014 07:30:07 AM PDT Install Date: Mon 23 Mar 2015 07:33:52 AM PDT Build Host: c6b8.bsys.dev.centos.org Group : System Environment/Base Source RPM: iptables-1.4.7-14.el6.src.rpm Size : 855952 License: GPLv2 Signature : RSA/SHA1, Fri 17 Oct 2014 01:03:00 PM PDT, Key ID 0946fca2c105b9de Packager : CentOS BuildSystem <http://bugs.centos.org> URL : http://www.netfilter.org/ Summary : Tools for managing Linux kernel packet filtering capabilities Description : The iptables utility controls the network packet filtering code in the Linux kernel. If you need to set up firewalls and/or IP masquerading, you should install this package.
2.查詢某包安裝生成的文件列表
rpm -ql PACKAGE_NAME
例10:查詢apache安裝所生產的文件列表
[root@dsl-189-172-5-105-dyn Packages]# rpm -ql httpd /etc/httpd /etc/httpd/conf /etc/httpd/conf.d /etc/httpd/conf.d/README /etc/httpd/conf.d/autoindex.conf /etc/httpd/conf.d/userdir.conf /etc/httpd/conf.d/welcome.conf . . .
3.查詢某包安裝後生成的全部配置文件
rpm -qc PACKAGE_NAME
4.查詢某包安裝後生成的全部文檔
rpm -qd PACKAGE_NAME
5.查看某包製做時隨版本變化的changelog信息
rpm -q --changelog PACKAGE_NAME
6.查詢某包提供的capabilities(即安裝後能夠爲其餘軟件提供的依賴文件等)
rpm -q --provides PACKAGE_NAME
例11:查詢xinetd包的capabilities
[root@dsl-189-172-5-105-dyn Packages]# rpm -q -provides xinetd inetd xinetd = 2:2.3.14-10.el5
7.查詢某包所依賴的capablities
rpm -q --requires PACKAGE_NAME
8.查詢某包安裝或卸載時執行的腳本
rpm -q --scripts PACKAGE_NAME
校驗
rpm {-V|--verify} [select-options] [verify-options]
rpm -V PACKAGENAME:查詢包安裝生成後是否發生了改變,在返回結果中若出現如下字符則說明相應內容被更改
c %config configuration file.(配置文件是否發生改變)
d %doc documentation file.(文檔是否發生改變)
g %ghost file (站位文件,文件內容部包含在軟件包有效內容裏)
l %license license file.(許可證文件)
r %readme readme file.(說明文件)
內容被更改的判斷依據
S size 大小不一致
M mode 權限和類型不一致
5 md5 md5校驗和不一致
D device 主/次設備號不一致
L readLink 路徑不匹配
U user 屬主不一致
G group 屬組不一致
T mtime 修改時間不一致
P 功能不一致
注:上面判斷依據的英文有一部分是我方便記憶使用的,並不全是其真的如此翻譯。
例12:查詢vsftpd軟件包是否發生了改變
[root@dsl-189-172-5-105-dyn Packages]# rpm -V vsftpd SM5....T. c /etc/vsftpd/vsftpd.conf #從以上返回文件可知vsftpd軟件包在安裝後配置文件(/etc/vsftpd/vsftpd.conf)發生了改變(固然我作了配置),大小、權限、md5校驗和、時間戳都發生了改變
程序包的合法性驗證
來源合法
由信任的製做者提供
依賴於:做者的數字簽名;簽名是做者使用本身的私鑰加密程序包的特徵性碼進行的
內容合法
完整性校驗成功,未被二次修改
依賴於:製做者提供的程序特徵碼
驗證方式:安裝着用一樣的特徵碼提取算法提取程序包的特徵碼,並與原做者提供的相比較
驗證其光盤中程序包的來源和法性
rpm --input /path/to/RPM-GPG-KEY-CentOS-6
驗證:rpm {-K|--checksig} PACKAGE_FILE
--nosignature:不檢查來源合法性
--nodigest: 不檢查完整性
例13:校驗vsftpd-2.2.2-12.e16——5.1.x86_64.rpm是否完整
[root@dsl-189-172-5-105-dyn Packages]# rpm -K --nosignature vsftpd-2.2.2-12.el6_5.1.x86_64.rpm vsftpd-2.2.2-12.el6_5.1.x86_64.rpm: sha1 md5 OK
到此,使用rpm實現軟件包的基本管理已基本敘述完畢,寫得十分倉促,如有不當之處請讀者明示。