1. rpm命令介绍
1.1 RPM包介绍
RPM 全名 RedHat Package Managerment,是由Red Hat公司提出,被众多Linux发行版本所采用,是一种数据库记录的方式来将所需要的软件安装到到Linux系统的一套软件管理机制。
它会建立统一的数据库文件,详细记录软件包安装 、卸载等变化信息,能够自动分析软件包依赖关系。
最大的特点就是将你要安装的软件先编译过,并且打包成为 RPM 机制的文件,通过打包好的软件里面默认的数据库,记录这个软件要安装的时候必须具备的依赖属性软件
当在你的 Linux 主机安装时,RPM 会先依照软件里面的数据查询Linux 主机的依赖属性软件是否满足,若满足则子以安装,若不满足则不子安装。
1.2 rpm包的优缺点
优点:
- 由于已经编译完成井且打包完华,所以软件传输与安装上很方便(不需要再重新编译);
 - RPM 在被安装之前,会先检查系统的硬盘容量、操作系统版本等,可避免文件被错误安装;
 - RPM 本身提供软件版本信息、依赖属性检查、软件用途说明、软件所含文件等信息,便于了解软件;
 - RPM 管理使用数据库记录RPM文件的相关参数,便于查询、删除、升级与反安装。
 
缺点:
由于 RPM 文件是已经打包好的数据,也就是说,里面的数据已经都编译完成了,所以,该软件安装文件几乎只能安装在原本默认的硬件与操作系统版本中。
这意味着你的主机系统环境必须要与当初建立这个软件安装文件的主机环境相同才行。
1.3 rpm包获取方式
有三种常用的rpm包获取渠道:
- 系统镜像光盘
 - 网站(如:阿里云分享的源)
 - 相应软件的官网。
 
比如阿里的镜像站,如图

再比如zabbix提供的zabbix源,如下图:

2. 语法格式及常用选项
2.1 RPM安装常用参数
参数  | 作用  | 
i  | 安装(Install)软件。  | 
U  | 升级(Upgrade)旧版本的软件。  | 
e  | 移除/删除(Erase)软件。  | 
v  | 显示详细的处理信息。  | 
h  | 显示安装进度。卸载不能用  | 
a  | (all) 查询所有已安装的软件包  | 
f  | (file)系统文件名(查询系统文件所属哪个软件包),反向查询  | 
i  | 显示已经安装的rpm软件包信息,后面直接跟包名  | 
l  | (list) 查询软件包中文件安装的位置  | 
p  | 查询未安装软件包的相关信息,后面要跟软件的命名  | 
R  | 查询软件包的依赖性  | 
q  | 在系统中查询软件或查询指定rpm包的内容信息  | 
c  | 查询程序包有哪些指定的配置文件  | 
nodeps  | 不校验依赖性,强制执行  | 
2.2 rpm格式介绍
[root@mufeng ~]# ls /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm 
/mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpmrpm包,每一段所包含的意思如下:
名称  | 作用  | 
lrzsz  | 软件名字  | 
-0  | 主版本号  | 
12  | 次版本号  | 
20  | 修订版本号  | 
27  | release 第几次发布版本  | 
el6  | 操作系统  | 
x86_64.rpm  | 软件包是64位的包  | 
3. 应用案例
3.1 从本地安装软件包
案例一: 安装上传下载命令rz
rz命令我们在上传和下载中用的最为广泛。
这里使用的是 -ivh,其中v是详细详细信息, h是查看安装进度。如果我们不使用vh也一样可以安装。
[root@mufeng ~]# rpm -ivh /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm 
warning: /mnt/Packages/lrzsz-0.12.20-27.1.el6.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                ########################################### [100%]
        package lrzsz-0.12.20-27.1.el6.x86_64 is already installed
[root@xinsz08-1 ~]#案例二: 只使用i进行安装
[root@mufenggrow ~]# rpm -i /mnt/Packages/http-parser-2.7.1-5.el7_4.x86_64.rpm 
警告:/mnt/Packages/http-parser-2.7.1-5.el7_4.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY案例三: 使用ih能够查看到进度
[root@mufenggrow ~]# rpm -ih /mnt/Packages/zsh-5.0.2-31.el7.x86_64.rpm 
警告:/mnt/Packages/zsh-5.0.2-31.el7.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
################################# [100%]
正在升级/安装...
################################# [100%]
[root@mufenggrow ~]#3.2 查询lrzsz的包有没有安装
-q xxx 列出xxx的安装信息
-qa xxx 列出包含 xxx 字段的软件信息
一个是完全匹配,一个是不完全匹配。
[root@mufeng ~]# rpm -q lrzsz
lrzsz-0.12.20-27.1.el6.x86_64
[root@mufenggrow ~]# rpm -qa |grep httpd
httpd-tools-2.4.6-97.el7.centos.5.x86_64
httpd-2.4.6-97.el7.centos.5.x86_64
[root@mufenggrow ~]#查看所有已经安装的包
[root@mufeng ~]# rpm -qa |wc -l
11353.3 查询命令是哪个包安装的
查询一个命令是哪个软件包安装的,需要用到-qf参数
[root@mufeng ~]# which rz
/usr/bin/rz
[root@mufeng ~]# rpm -qf /usr/bin/rz
lrzsz-0.12.20-27.1.el6.x86_643.4 查询一个软件包的详细信息
这时候可以使用pqi的参数
-i,–info:查询程序包相关的信息,包含版本、信息、时间等等
[root@mufenggrow ~]# rpm -qpi /mnt/Packages/lrzsz-0.12.20-36.el7.x86_64.rpm 
Name        : lrzsz
Version     : 0.12.20
Release     : 36.el7
Architecture: x86_64
Install Date: (not installed)
Group       : Applications/Communications
Size        : 184846
License     : GPLv2+
Signature   : RSA/SHA256, 2014年07月04日 星期五 11时35分32秒, Key ID 24c6a8a7f4a80eb5
Source RPM  : lrzsz-0.12.20-36.el7.src.rpm
Build Date  : 2014年06月10日 星期二 07时29分11秒
Build Host  : worker1.bsys.centos.org
Relocations : (not relocatable)
Packager    : CentOS BuildSystem <http://bugs.centos.org>
Vendor      : CentOS
URL         : http://www.ohse.de/uwe/software/lrzsz.html
Summary     : The lrz and lsz modem communications programs
Description :
Lrzsz (consisting of lrz and lsz) is a cosmetically modified
zmodem/ymodem/xmodem package built from the public-domain version of
the rzsz package. Lrzsz was created to provide a working GNU
copylefted Zmodem solution for Linux systems.可以看到与软件包所有相关的参数,比如软件包名字,版本号,大小等等
3.4 删除软件包
删除软件包使用-e参数
[root@mufeng ~]# rpm -e lrzsz
[root@mufeng ~]# rpm -ql lrzsz如果有依赖加参数 --nodeps
加上 --nodeps相当于强制删除
[root@mufeng ~]# rpm -e lrzsz --nodeps3.5 升级软件包
rpm -Uvh zsh-5.0.2-14.el7.x86_64.rpm参数  | 描述  | 
-U  | 升级或者安装  | 
-F  | 单纯的升级,如果之前没有rpm包将无法升级  | 
–test  | 测试安装,检查并报告完成 --> rpm -Uvh --test PACKAGE_FILE  | 
–force  | 强制升级(不建议使用)  | 
注意:
(1)不要对内核做升级操作,Liunx支持多内核并存,直接安装新版本
(2) 如果源程序包的配置文件安装后曾修改过,升级时,新版本的程序提供的同一配置文件不会覆盖原有版本文件,而重命名为(FILENAME,rpmnew)
3.6 rpm包校验
作用: 查看rpm是否被修改
参数:
选项  | 说明  | 
-V  | 校验指定RPM包中的文件,若该软件所含的文件被改动过,才会列出来;  | 
-Va  | 校验本机已经安装的所有软件包  | 
-Vf  | 校验某个系统文件是否被修改  | 
我们以httpd为例子,看看是否被改动过
[root@mufeng]# yum install httpd   
#安装httpd
[root@mufeng]# rpm -V httpd
[root@mufeng ~]# vim /etc/init.d/httpd  
#6的系统
[root@mufeng ~]# vim /etc/init.d/httpd  
 #修改httpd文件
[root@mufeng~]# rpm -V httpd
S.5....T.    /etc/rc.d/init.d/httpd可以看到如果没有改动过,rpm -V没有任何的输出。如果改动了之后,就输出了内容
这里对输出的内容做一下解释:
字符  | 信息提示  | 
S  | 文件大小已改变;  | 
M  | 文件的类型或文件的权限(rwx)已改变;  | 
5  | 文件 MD5 校验和是否改变(可以看成文件内容已改变);  | 
D  | 设备的主从代码已改变;  | 
L  | 文件路径已改变;  | 
U  | 文件的属主(所有者)已改变;  | 
G  | 文件的属组已改变;  | 
T  | 文件的修改时间已改变;  | 
P  | (caPabilities differ) 功能已被改变;  | 
我们也可以修改httpd.conf 来看一下输出结果
[root@mufeng ~]# rpm -Vf /etc/httpd/conf/httpd.conf
S.5…T. c /etc/httpd/conf/httpd.conf
这里出现了个c, c在这里表示的是文件类型
其他类型如图:
字符  | 表示内容  | 
c  | 配置文件  | 
d  | 普通文档  | 
l  | 授权文件  | 
r  | 描述文件  | 
4.总结
rpm安装和卸载十分简单,但查询所用的参数比较多,容易混乱,这里再总结下关于查询的命令:
- rpm -qpi httpd 查询未安装包的详细信息
 - rpm -qi httpd 查看程序包的相关信息
 - rpm -ql httpd 查看程序包安装产生的文件列表
 - rpm -qc zsh 查看程序包的配置文件
 - rpm -qd zsh 查看程序包提供的文档信息
 - rpm -qR zsh 查询程序包依赖的包
 - rpm -Vf 查看命令是否被改动过
 










