很多人最识Linux的时候,搞不明白什么是软件包管理系统,其实,linux下的软件包管理系统就是在电脑中自动安装、配置、卸载和升级软件包的工具组合,有点类似于windows下的控制面板。

在Linux发行版中,几乎每一个发行版都有自己的软件包管理系统。常见的有deb软件包的dpkg以及它的前端apt(适用于debian、Ubuntu等)。rpm以及它的前端yum(适用于RedHat系列的系统)。

RPM,全称RPM Package Manager,是由Red Hat推出的软件包管理系统,现在在各种发行版中普遍适用。

RRM软件包是将程序源代码经过编译和封装以后形成的包文件,在软件包里面会封装软件的二进制程序、配置文件、帮助手册、库文件以及头文件等。RPM包的结构如下图所示:

CentOS软件包管理之RPM_Linux  rpm

RPM软件包的安装与卸载:
# rpm [options] /path/to/rpmfile

option:
-i|--install:安装指定软件
-v|--verbose:显示安装过程
-e|--erase:卸载指定的软件
-h|--hash:以#的方式显示安装进度条,一个#为2%
--nodeps:忽略依赖关系
--test:测试安装
-U:升级+安装(如果之前有安装则升级,如果之前没有安装则安装)
-F:升级(如果之前有安装则升级,如果之前没安装则不做任何操作)
--replacepkgs:重新安装软件包
--force:在软件包的安装或升级过程中,如果出现某个文件已经安装或者某一个软件已经安装时
可以使用--force选项强制安装,等同于--replacepkgs --replacefiles --oldpackage同时使用


常用的软件包安装选项为:
#rpm -ivh /path/to/rpmfile
# rpm -Uvh /path/to/rpmfile


示例 1:

CentOS软件包管理之RPM_Linux  rpm_02

RPM软件包验证:
RPM包使用gpg非对称加密机制,可以验证包的完整性和来源的合法性。
# rpm --import PUBKEY:rpm使用--import导入软件包提供者制作的公钥,可以自动进行软件包的验证
#rpm {-K|--checksig}  [--nosignature] [--nodigest] PACKAGE_FILE:rpm可以使用-K或--checksig选项对软件包进行来源和完整性的验证,--nosignature选项是指不进行来 源合法性验证,--nodigest选项是指不进行完整性验证


示例 2:

CentOS软件包管理之RPM_Linux  rpm_03


RPM查询:
# rpm {-q|--query} [select-options] [query-options] [PACKAGE_NAME|PACKAGE_FILE]


常用select-option:
-a|--all:将已安装的所有包显示在屏幕上(Query all installed packages )
# rpm -qa
-f|--file FILE:根据指定的文件显示出该文件由哪一个包生成(Query package owning FILE)
-p|--package PACKAGE_FILE:根据指定的软件包文件,搭配query-option选项可查询未安装的包信息。


常用query-option:
-l|--list:列出该软件包安装后需要生成的所有文件( List files in package)
-i|--info:显示软件包的信息,包括名称、版本和描述
(Display package information, including name, version and description)
-c|--configfiles:仅显示-l选项列出文件中的配置文件(List only configuration files (implies -l))
-d|--docfiles:仅显示-l选项列出文件中的文档或帮助手册(List only documentation files (implies -l))
--scripts:显示该软件包在安装或卸载前后需要运行的脚本
(List the package specific scriptlet(s) that are used as part of the installation and uninstallation
processes)


示例 3:

CentOS软件包管理之RPM_Linux  rpm_04CentOS软件包管理之RPM_Linux  rpm_05CentOS软件包管理之RPM_Linux  rpm_06CentOS软件包管理之RPM_Linux  rpm_07CentOS软件包管理之RPM_Linux  rpm_08CentOS软件包管理之RPM_Linux  rpm_09

 

 

 

 

RPM校验:
RPM还提供了对软件包生成的文件进行校验的功能(可针对文件大小、权限、MD5、修改时间等进行校验),当没有任何改变时候,显示9个'-',如果某一项发生改变则在相应位显示标识符,各标识符代表含义如下:
S文件大小发送改变(file Size differs)
M文件权限发生改变(Mode differs (includes permissions and file type))
5文件MD5值发送改变(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)


# rpm {-V|--verify} PAKCAGE_NAME


示例 4:

CentOS软件包管理之RPM_Linux  rpm_10

备注:这个是我在/etc/lftp.conf文件末尾新增了一行后的校验结果

RPM包数据库:
RPM软件包有一个本地的数据库(在/var/lib/rpm目录下),RPM包的安装、升级和删除都会更新数据库的信息。但是当数据库损坏之后,软件包的更新卸载就会出现错误。现在只需要将数据库重建就可以解决问题,如下图所示:

示例 5:

CentOS软件包管理之RPM_Linux  rpm_11