RPM程序包管理器详解
RPM是RedHatPackage 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 �Ce package_name;卸载操作较简单,使用rpm -e 加软件包名称即可。
三、升级程序包: rpm [option]/path/to/package_file
在原有安装包的基础上升级或安装,使用-Uvh,这种安装方式如果要安装的包之前已经安装过,那么会提示已经安装不覆盖,如果未安装过,则直接安装。另外,在原有应用程序的基础上升级, 使用-F选项,常用的命令选项组合是-Fvh,如下图所示:
四、查询操作示例:
查询某包是否安装,以wireshark.x86_64为例说明
# rpm-q wiresharek:如下图所示:
# rpm -q wireshark sqlite;可以一次查询多个,包名之间用空格隔开,如下图所示:
显示的结果是wireshare包未安装,sqlite已经安装上了。
# rpm -qa;查询所有已经安装的包。
# rpm -qa | grep "samba";查询包名称中含有某字符串的包,这种查询方式很常用,如下图所示:
# rpm -qi mtr;查询包的描述信息,如下图所示:
# rpm -ql parted;查询某包安装生成了哪些文件,如图所示:
这个命令很常用,显示的文件也往往会很多,需要留意生成的文件路径尤其是配置文件的路径。
# rpm -qc wget;查询某包安装生成了哪些配置文件,如图所示:
# rpm -qd wget;查询安装包安装生成了哪些文档,如图所示:
# rpm -q --scripts wget;查询程序包的相关脚本,如图所示:
# rpm -qf /etc/fstab;查询/etc/fstab文件是由哪个包安装生成的,这个命令很常用,如图所示:
对尚未安装的包执行查询,常见参数有:
-qpi:查询未安装包信息:
-qpl:查询生成哪写文件:
-qpc;尚未安装的包会生成哪写配置文件
-qpd:尚未安装的包会生成哪些帮助文档
五、校验:检查包安装生成的文件属性是否发生变化,在某种程度上可以判断安装的应用程序是否被修改过,进而可以判断系统是否被入侵等,使用的格式是:# 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 -qi gpg-pubkey-NAME;可以显示密钥的详细信息
另外我们也可以使用手动检查的方式检查rpm来源的合法性,示例如下:
或者使用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:重建,直接重建,这种方式覆盖原有的数据库。