RPM程序包管理器详解
RPM是RedHatPackage Manager的缩写,它的主要功能是将编译好的程序打包成一个文件或有限的几个文件,可用于实现安装、卸载、升级、查询等功能。
Linux系统中,我们要安装的程序包通常由四部分组成:
1、二进制程序。2、库文件。3、配置文件。4、帮助文件
这四部分有很多文件组成,那么我们要安装一个应用程序,就需要安装很多文件,而这些文件要实现高效的管理,比如安装,卸载,都需要对这些众多的文件实现管理,这些功能可以由程序包管理器来实现。
RPM程序包管理器自身的组成:
1、数据库部分,包含:
RPM程序包管理器的数据库可以实现追踪每个安装的应用程序的信息,以方便在卸载的时候进行追踪,所以它的数据库中包含安装的应用程序名称及版本。
依赖关系的说明:Linux系统中实现一个功能往往会由众多目的单一的小程序组成,所以实现一个目的往往经由很多小程序组合起来才能实现,这样他们之间就存在着依赖关系,在程序包管理器中要有这些程序包的依赖关系的说明
功能性说明:安装的程序包的功能说明
安装生成的各文件路径及校验码
2、程序的组成清单文件和安装卸载时运行的脚本
RPM程序包管理器的主要功能:打包、安装、卸载、升级、校验、数据库管理
RPM包管理器的使用:
一、安装程序包:rpm [option] /path/to/package_file,常用选项:
-i:install
-v:verbose,显示详细信息
-h:显示安装进度,每个#表示进度的2%
--nodeps:忽略依赖关系安装
--replacepkgs:重新安装
常用的组合选项是:-ivh,举例:
# rpm -ivh screen
二、卸载程序包: rpm –e package_name
卸载操作较简单,使用rpm -e 加软件包名称即可。
三、升级程序包: rpm [option]/path/to/package_file
1、 在原有安装包的基础上升级或安装,使用-U或者用-Uvh
如果之前已经安装过,那么会提示已经安装,如果未安装过,则直接安装。
2、只是在原有应用程序的基础上升级, -F常用的命令选项组合是-Fvh
查询操作:
1、查询某包是否安装,以wireshark.x86_64为例说明
# rpm-q wiresharek
可以一次查询多个,包名之间用空格隔开,例如:
# rpm -q wireshark sqlite
可以看到wireshare包未安装,sqlite已经安装上了。
2、查询所有已经安装的包
# rpm-qa;这种方式会列出当前系统上已经安装的所有包,实际使用中很少这样用,查询起来不便,于是,我们经常会更进一步的查询某类型的包,指定查询条件,比如:
# rpm-qa | grep "samba"
# rpm -qi mtr
4、查询某包安装生成了哪些文件,例如:
# rpm -ql parted
这个命令很常用,显示的文件也往往会很多,我们需要特点留意显示的文件列表中二进制程序的文件位置以及配置文件的配置,查询某安装程序生成的文件中某些特定类型的文件的方法如下:
(1)查询某包安装生成了哪些配置文件,例如:
# rpm -qc wget
(2)查询某包安装生成了哪些文档,例如:
# rpm -qd wget
(3)查询程序包的相关脚本,例如:
与程序包的相关脚本有四类:
preinstall:包安装前要执行的脚本;
postinstall:包安装后脚本;
preuninstall:脚本卸载前脚本;
postuninstall:卸载后运行的脚本;
5、查询某文件是由哪个包安装生成的,这个命令很常用,举例说明:
6、对尚未安装的包执行查询,例如:
-qpi:查询未安装包信息:
-qpl:查询生成哪写文件:
-qpc;尚未安装的包会生成哪写配置文件
-qpd:尚未安装的包会生成哪些帮助文档
7、校验:检查包安装生成的文件属性是否发生变化,在某种程度上可以判断安装的应用程序是否被修改过,进而可以判断系统是否被入侵等,使用的格式是:# rpm -V package_name。
rpm包来源合法性及完整性检验:从互联网上或者其他渠道获得的RPM建议使用相应的公钥做来源合法性及完整性检验,在系统上导入包的制作者的公钥,安装过程中,如果安装包没有问题,那么安装过程结束后就不会有no key的提示。导入key的方法,以光盘中自带的key为例说明。
导入公钥:
# rpm --import /media/cdrom/RPM-GPG-KEY-CentOS-6
显示所有已经导入的gpg格式的公钥:
#rpm -qa gpg-pubkey
#rpm -qi gpg-pubkey-NAME,可以显示密钥的详细信息
之后再次安装光盘目录中的RPM包就不再提示no key信息了。
上面是导入公钥,实现自动检查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:重建,直接重建,这种方式覆盖原有的数据库。
原文地址:http://9164364.blog.51cto.com/9154364/1440480