RPM程序包管理器详解

RPMRedHatPackage Manager的缩写,它的主要功能是将编译好的程序打包成一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询等功能。 

Linux系统中,我们要安装的程序包通常由四部分组成:1、二进制程序。2、库文件。3、配置文件。4、帮助文件

      这四部分有很多文件组成,那么我们要安装一个应用程序,就需要安装很多文件,而这些文件要实现高效的管理,比如安装,卸载,都需要对这些众多的文件实现管理,这些功能可以由程序包管理器来实现,它的主要功能是追踪每个安装的应用程序信息,软件包之间依赖关系的说明,程序包的功能说,生成的文件名称及路径、校验码等信息。

RPM程序包管理器自身的组成:数据库部分和程序的组成清单文件和安装卸载时运行的脚本

 RPM程序包管理器的主要功能:打包、安装、卸载、升级、校验、数据库管理

      

RPM包管理器的使用:

一、安装程序包:rpm [option]  /path/to/package_file,常用选项:

-i:安装

-v:显示安装详细信息

-h:显示安装进度,每个#表示安装进度的2%

--nodeps:忽略依赖关系安装,这种方式安装容易缺失程序运行依赖的包,不建议使用,如果需要解决依赖关系,建议使用yum程序安装

--replacepkgs:重新安装

示例:

# rpm -ivh screen;常用的组合选项是:-ivh,如下图所示:

RPM程序包管理器详解_RPM

二、卸载程序包:

 rpm  –e  package_name;卸载操作较简单,使用rpm -e 加软件包名称即可。

三、升级程序包: rpm [option]/path/to/package_file

在原有安装包的基础上升级或安装,使-Uvh,这种安装方式如果要安装的包之前已经安装过,那么会提示已经安装不覆盖,如果未安装过,则直接安装。另外,在原有应用程序的基础上升级, 使用-F选项,常用的命令选项组合是-Fvh,如下图所示:

RPM程序包管理器详解_gpg_02

四、查询操作示例:

查询某包是否安装,以wireshark.x86_64为例说明

# rpm-q wiresharek:如下图所示:

RPM程序包管理器详解_RPM_03

# rpm -q wireshark sqlite;可以一次查询多个,包名之间用空格隔开,如下图所示:

RPM程序包管理器详解_gpg_04

示的结果是wireshare包未安装,sqlite已经安装上了。

# rpm  -qa;查询所有已经安装的包

# rpm  -qa | grep "samba";查询包名称中含有某字符串的包,这种查询方式很常用,如下图所示:

RPM程序包管理器详解_包管理器_05

# rpm -qi mtr;查询包的描述信息,如下图所示:

RPM程序包管理器详解_gpg_06

# rpm -ql parted;查询某包安装生成了哪些文件,如图所示:

RPM程序包管理器详解_包管理器_07

这个命令很常用,显示的文件也往往会很多,需要留意生成的文件路径尤其是配置文件的路径。

# rpm -qc wget查询某包安装生成了哪些配置文件,如图所示:

RPM程序包管理器详解_包管理器_08

# rpm -qd wget;查询安装包安装生成了哪些文档,如图所示:

RPM程序包管理器详解_包管理器_09

# rpm -q --scripts wget;查询程序包的相关脚本,如图所示:

RPM程序包管理器详解_gpg_10

# rpm -qf /etc/fstab;查询/etc/fstab文件是由哪个包安装生成的,这个命令很常用,如图所示:

RPM程序包管理器详解_包管理器_11

对尚未安装的包执行查询,常见参数有:

 -qpi:查询未安装包信息:

RPM程序包管理器详解_gpg_12

 -qpl:查询生成哪写文件:

RPM程序包管理器详解_RPM_13

-qpc;尚未安装的包会生成哪写配置文件

RPM程序包管理器详解_包管理器_14

 -qpd:尚未安装的包会生成哪些帮助文档

RPM程序包管理器详解_包管理器_15

五、校验:检查包安装生成的文件属性是否发生变化,在某种程度上可以判断安装的应用程序是否被修改过,进而可以判断系统是否被入侵等,使用的格式是# rpm -V package_name。      

         从互联网上或者其他渠道获得的RPM包建议使用相应的公钥做来源合法性及完整性检验,在系统上导入包的制作者的公钥,安装过程中,如果安装包没有问题,那么安装过程结束后就不会有no key的提示。导入key及查询key的方法,以光盘中自带的key为例说明。

#  rpm --import  /media/cdrom/RPM-GPG-KEY-CentOS-6;导入公钥,之后再次安装光盘目录中的RPM包就不再提示no key信息了。

#rpm -qa gpg-pubkey;显示所有已经导入的gpg格式的公钥,如下图所示:

RPM程序包管理器详解_包管理器_16

 #rpm -qi gpg-pubkey-NAME;可以显示密钥的详细信息

RPM程序包管理器详解_RPM_17

另外我们也可以使用手动检查的方式检查rpm来源的合法性,示例如下:

RPM程序包管理器详解_包管理器_18 或者使用rpm  -K --checksig /path/to/package_file,结果与rpm -K 加包名结果相同。

当然,我们也可以不检查包完整性和来源合法性使用rpm -K --nodigest 和rpm -K --nosignature加上对应的包名即可


当RPM程序包管理器出现数据库故障时,我们可以对其进行重建,它的数据库目录在/var/lib/rpm目录下,重建的方式是:

    1、 rpm --initdb:初始化,事先没有库,会新建一个,如果有,则不新建。

    2、 rpm --rebuilddb:重建,直接重建,这种方式覆盖原有的数据库。