Centos系统rpm命令的运用

   rpm命令的运用分别从rpm包的安装、升级、卸载、查询、校验来简单的介绍rpm命令的使用。



方式选项选项介绍
安装-i安装新包,其后跟的是包文件
-v输出包安装过程,其后跟的是包文件
-h以“#”进度显示包的安装过程,其后跟的是包文件
--nodeps安装时忽略包的依赖关系,其后跟的是包文件,此选项可以使用以下的升级、卸载
--replacepkgs重新安装且覆盖原有包所安装的文件,其后跟的是包文件
--test测试安装,可用查看包之间的依赖关系或冲突报告等。此选项可以使用以下的升级、卸载
--force强制安装,不论当前程序是版本,都使用此包进行安装,其后跟的是包文件
升级-U|--upgrade升级或安装,如此前已安装有相应的旧版本的包并升级直现有包的版本,如没有安装,则进行安装操作,其后跟的是包文件
-F|--freshen纯升级操作,如果没有安装旧版本的程序,此选项是不会安装新版本的,只有旧版本存在才会进行升级操作,其后跟的是包文件
卸载-e卸载跟在选项其后的包名程序,其后跟的是包名
--allmatches如果一个程序包同时安装多个版本,则此选项一次全部卸载;其后跟的是包名
查询-q查询某包或某些包是否安装,其后跟的是包名
-qa查询当前系统上所有安装的包程序
-qf查询某文件是由哪个包安装时所产生的,其后跟的是一个文件路径
-qi查询某包的简要说明信息,其后跟的是包名
-ql查询某包所产生的文件列表,其后跟的是包名
-qc查询某包安装完成后产生的配置文件,其后跟的是包名
-qd查询某包安装完成后产生的帮助文件,其后跟的是包名
-q--changelog查看某包制作时随着版本的变化的所有变化信息,其后跟的是包名
-q--provides查询某包提供的capabilities,其后跟的是包名
-q --requires查询包中的依赖关系,其后跟的是包名
-q--scripts查询某包安装或卸载时所执行的脚本;,其后跟的是包名
-p [options]查询未安装包的以上信息,[options]除了-q-qa外其所有查询选项都可以使用,,其后跟的是包文件
检验-V|--verify查询包安装之后所生成的文件是否发生了改变,其后跟的是一个包名
--import导入验证文件,其后跟的一个验证文件
-K|--checksig验证程序包的完整性,其后跟的是包文件

提示:

  包文件指的是一个拥有完整的包命令格式的文件,如:nginx-1.6.2-1.el6.ngx.x86_64.rpm

         包名指的是当一个包文件被安装后,其包的程序名,如:nginx



rpm命令实战:

(1)程序包的安装“-i”选项,如安装nginx

wKioL1UpLIehBVXMAAY1dOSJBYo701.bmp

(2)程序包的安装“-ivh”选项,如安装tree命令

[root@Bisc-lab01 ~]# rpm -ivhtree-1.5.3-2.el6.x86_64.rpm 
warning: tree-1.5.3-2.el6.x86_64.rpm:Header V3 RSA/SHA256 Signature, key ID c105b9de: NOKEY
Preparing...              ########################################### [100%]
   1:tree                 ########################################### [100%]

提示:你可以试试-ivvh选项,你将会能看到更详细的安装过程。


(3)忽略安装时所产生的依赖关系

wKioL1UpLTzhDMi_AARPoHqeHhY946.bmp

  当我们在试图安装一个zabbix-web的程序包时,在安装过程提示错误:安装失败,此时会列出此程序包所需依赖关系,安装过程将中止。有些程序包在依赖包关系上会显示出所依赖的程序包,而有些只会提示你它所依赖的库文件,这就需要查看此程序包所依赖的是什么库文件,并安装此库文件程序后在安装相应的程序包。

[root@Bisc-lab01 Packages]#rpm -ivh --test tk-8.5.7-5.el6.x86_64.rpm
warning:tk-8.5.7-5.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID c105b9de:NOKEY
error: Failed dependencies:
    libtcl8.5.so()(64bit) is needed by tk-1:8.5.7-5.el6.x86_64
    tcl = 1:8.5.7 is needed by tk-1:8.5.7-5.el6.x86_64

wKioL1UpOP2BztJDAAKjcFSo2s8148.bmp

  忽略依赖关系,安装zabbix-web程序,忽略依赖能程序能安装成功,但未必能成功的运行。有些程序所依赖的有关系是可以忽略的,如缺少某个文件等。

[root@Bisc-lab01 ~]# rpm -ivh--nodeps zabbix-web-2.4.0-1.el6.noarch.rpm 
warning:zabbix-web-2.4.0-1.el6.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID79ea5ed4: NOKEY
Preparing...                   ###########################################[100%]
   1:zabbix-web          ###########################################[100%]

 

(4)查询zabbix-web程序是否安装成功

[root@Bisc-lab01 Packages]#rpm -q zabbix-web
zabbix-web-2.4.0-1.el6.noarch
[root@Bisc-lab01 Packages]#rpm -q zabbix-web
package zabbix-web is notinstalled

wKiom1UpN_PzrHAJAAOzLPxfUt8080.bmp

5)升级程序ntp程序包

[root@Bisc-lab01 ~]# rpm -qntp                          #查询程序包ntp并没有安装
package ntp is not installed
[root@Bisc-lab01 ~]# rpm -Fntp-4.2.4p8-3.el6.centos.x86_64.rpm  #进行纯升级操作
warning: ntp-4.2.4p8-3.el6.centos.x86_64.rpm:Header V3 RSA/SHA1 Signature, key ID c105b9de: NOKEY
[root@Bisc-lab01 ~]# rpm -qntp                          #纯升级完成后,发现程序包并没有安装
package ntp is not installed

#小结:

  当程序在进行纯升级操作时,如果原程序没有进行安装过,在纯升级时并不会安装程序包。所以纯升级只有在原程序包已经安装在系统中,才能进行纯升级操作,升级才能有效。

6)升级或安装程序包

  ntp程序存在时进行升级操作:

[root@Bisc-lab01 ~]# rpm -qntp                                  #查询ntp程序包是否安装
ntp-4.2.4p8-3.el6.centos.x86_64
[root@Bisc-lab01 ~]# rpm -Untp-4.2.6p5-1.el6.centos.x86_64.rpm     #进行升级操作
warning:ntp-4.2.6p5-1.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key IDc105b9de: NOKEY
 [root@Bisc-lab01 ~]# rpm -q ntp                              #查询ntp程序包,已经升级成功
ntp-4.2.6p5-1.el6.centos.x86_64


 ntp程序不存在是进行升级操作:

[root@Bisc-lab01 ~]# rpm -e--nodeps  ntp   #卸载ntp包来模拟包未安装
[root@Bisc-lab01 ~]# rpm -qntp            #查询包的是否安装,显示未安装
package ntp is not installed
[root@Bisc-lab01 ~]# rpm -Untp-4.2.6p5-1.el6.centos.x86_64.rpm #进行升级ntp程序包
warning:ntp-4.2.6p5-1.el6.centos.x86_64.rpm: Header V3 RSA/SHA1 Signature, key IDc105b9de: NOKEY
[root@Bisc-lab01 ~]# rpm -qntp            #查询ntp包已经安装并是升级的版本
ntp-4.2.6p5-1.el6.centos.x86_64

#小结:

   当使用“-U”选项时,如果程序不存在,程序包会被安装,此时还会忽略依赖关系进行升级安装;程序包存在时,会自动升级至指定的程序包的版本,并忽略依赖关系。

7)查询ntp程序包的详细说明信息;

[root@Bisc-lab01 ~]# rpm -qi bash
Name        : bash                         Relocations: (not relocatable)
Version     : 4.1.2                             Vendor: CentOS
Release     : 29.el6                        Build Date: Thu 16 Oct 2014 09:58:35 PM CST
Install Date: Mon 23 Mar 2015 06:03:29 PM CST      Build Host: c6b8.bsys.dev.centos.org
Group       : System Environment/Shells     Source RPM: bash-4.1.2-29.el6.src.rpm
Size        : 3140846                          License: GPLv3+
Signature   : RSA/SHA1, Sat 18 Oct 2014 04:03:01 AM CST, Key ID 0946fca2c105b9de
Packager    : CentOS BuildSystem <http://bugs.centos.org>
URL         : http://www.gnu.org/software/bash
Summary     : The GNU Bourne Again shell
Description :
The GNU Bourne Again shell (Bash) is a shell or command language
interpreter that is compatible with the Bourne shell (sh). Bash
incorporates useful features from the Korn shell (ksh) and the C shell
(csh). Most sh scripts can be run by bash without modification.


#以上选项说明:

#Name:包名                        #Relocations: 是否被重新定义到另的位置

#Version:版本号                     #Vendor:制作商或提供商

#Release:发行号                     #BuildDate:编译时间,包的构造时间

#Install Date:安装时间                #BuildHost:编译时所在的主机

#Group:在Centos和REHL上是分组的,包属于的组/子组          #SourceRPM:源码格式的RPM包

#Size:包的大小                                #License:包的许可

#Signature:包的签名信息,与包的安全相关

#Packager:包的制作者

#URL:包的源代码程序的获取方式

#Summary:简要说明

#Description:较详细的说明信息

8)查询某文件是由哪个程序包所产生的

[root@Bisc-lab01 ~]# rpm -qf/etc/passwd
setup-2.8.14-20.el6_4.1.noarch

9)查询某包所依赖关系

[root@Bisc-lab01 ~]# rpm -q--requires tree
libc.so.6()(64bit)  
libc.so.6(GLIBC_2.2.5)(64bit)  
libc.so.6(GLIBC_2.3)(64bit)  
libc.so.6(GLIBC_2.3.4)(64bit)  
libc.so.6(GLIBC_2.4)(64bit)  
rpmlib(CompressedFileNames)<= 3.0.4-1
rpmlib(FileDigests) <=4.6.0-1
rpmlib(PayloadFilesHavePrefix)<= 4.0-1
rtld(GNU_HASH)  
rpmlib(PayloadIsXz) <=5.2-1

10)查询某包安装或卸载时所执行的脚本

[root@Bisc-lab01 ~]# rpm -q--scripts httpd
preinstall scriptlet (using/bin/sh):       #安装前要所执行的脚本
# Add the "apache"user
getent group apache>/dev/null || groupadd -g 48 -r apache
getent passwd apache >/dev/null|| \
  useradd -r -u 48 -g apache -s /sbin/nologin \
    -d /var/www -c "Apache" apache
exit 0
postinstall scriptlet (using/bin/sh):      #安装完所执行的脚本
# Register the httpd service
/sbin/chkconfig --add httpd
/sbin/chkconfig --addhtcacheclean
preuninstall scriptlet (using/bin/sh):     #卸载前所执行的脚本
if [ $1 = 0 ]; then
    /sbin/service httpd stop > /dev/null 2>&1
    /sbin/chkconfig --del httpd
    /sbin/service htcacheclean stop > /dev/null 2>&1
    /sbin/chkconfig --del htcacheclean
fi
posttrans scriptlet (using/bin/sh):        #卸载完所要执行的脚本
test -f/etc/sysconfig/httpd-disable-posttrans || \
 /sbin/service httpd condrestart >/dev/null2>&1 || :

11)查询某包安装后生成的文件是否有变动

  当你安装一个些程序后,经过一段时间你发生系统最近有被人动过的迹象,如何查看某程序下的文件是否有变动,使用rpm命令的“-V”选项就可以查出。

[root@Bisc-lab01 ~]# rpm -Vhttpd
S.5....T.  c /etc/httpd/conf/httpd.conf

#如果文件有改变相应位会以相位的字母或数字来表示:

 S file Size differs                 

 M Mode differs (includes permissions and filetype)

 5 digest (formerly MD5 sum) differs  

 D Device major/minor number mismatch

 L readLink(2) path mismatch 

 U User ownership differs

 G Group ownership differs

 T mTime differs 

 P caPabilities differ

12)验证光盘中程序包的来源及完整性

[root@Bisc-lab01 ~]# mount -r/dev/cdrom /media/cdrom/          #挂载光盘
[root@Bisc-lab01 ~]# cd/media/cdrom/                    #切换着刚才挂载目录
[root@Bisc-lab01 cdrom]# rpm--import RPM-GPG-KEY-CentOS-6        #倒入验证码
[root@Bisc-lab01 cdrom]# rpm-K  Packages/tree-1.5.3-2.el6.x86_64.rpm #验证包文件,显示OK
Packages/tree-1.5.3-2.el6.x86_64.rpm:rsa sha1 (md5) pgp md5 OK

小结:

  对于程序包的管理,说简单又不简单,说复杂也不复杂,对于以上的命令选项,在使用中结给你带来很你想不到的意外惊喜,以上的选项都可以通过man命令来获取,要善于使用帮助信息来给你提供相应的帮助。对于程序包的依赖关系,可以使用yum命令来解决一个程序在安装过程中所依赖的关系,请看下一篇博文,关于yum命令的使用,及建立属于自己的yum软件仓库。