RPM包管理器(Red Hat Package Manager)

早期要想在Linux系统中安装软件只能采取源码包的方式安装,每次要安装程序时都需要通过找源代码然后去编译成二进制文件,这个过程要花费大量的时间,更烦人的是在安装、升级、卸载服务程序时往往要考虑到其他程序、库的依赖关系,操作难度和强度都非常高。为解决这些问题,包管理器应运而生,它通过将编译好的应用程序的各组文件打包成一个或几个程序包文件,从而更方便地实现程序包的安装、升级、卸载和查询等管理操作。

RPM命名“RedHat Package Manager”,简称则为RPM。这个机制最早由Red Hat这家公司开发出来的。RPM最大的特点就是需要安装的软件已经编译过,并已经打包成RPM机制的安装包,通过里头默认的数据库记录这个软件安装时需要的依赖软件。 当在你的Linux主机进行安装时,RPM会先依照软件里头的数据查询Linux主机的依赖属性软件是否满足,若满足则予以安装,若不满足则不予安装。

RPM包格式

标准格式的RPM包由软件包名、版本信息、发布版本号、运行平台、扩展名。
httpd-2.4.6-17.el7.x86_64.rpm(httpd:软件名;-2.4.6:版本;-17.el7:发行版本号,其中el7表示的是RHEL7;x86_64:运行平台)
其他格式的PRM包
*.src.rpm:这类软件包是源程序包,不能直接安装运行,先要通过编译,如httpd-2.4.6-17.el7.src.rpm
*.noarch.rpm:可以在不同cpu上使用
*.athlon.rpm:这中包强调在AMD系统上能更好发挥AMD cpu性能

RPM默认安装路径

rpm软件安装完毕后,该软件的相关信息会被写入 /var/lob/rpm/ 目录下的数据库文件中,rpm软件升级、查询、数字签名等等都需要 /var/lob/rpm/ 目录。

/etc                  配置文件的目录
/usr/bin              可执行文件
/usr/lib              一些程序使用的动态函式库
/usr/share/doc        软件的使用手册与说明文件
/usr/share/man        一些 man page 文件

RPM包管理命令

命令语法:rpm [选项] [rpm包名]
有关参数

-q			查询(软件包名或文件名)
-i或--install	        安装(软件包)
-U或--upgrade	        升级(软件包)
-e或--erase		卸载(软件包),注意后面软件名(即通过-q查询并显示出来的名字)而不是安装包名。
-v或--verify	        可视化,也就是提供详细的信息输出
-h或--hash		显示进度
-a			所有(软件包)
-l		        显示软件包的文件列表
-d			显示被标注为文档的文件列表
-c			显示被标注为配置文件的文件列表,常用于查询软件包的配置文件列表
-f			文件所属与哪个(软件包)
-t			测试安装(软件包)
--force			表示强制安装,即使覆盖属于其他包的文件也要安装
--nodeps		表示忽略软件包之间的依赖关系,强制安装或卸载,有可能因为缺少依赖包而无法正常使用,不建议使用此方法。

常用命令组合

rpm -ivh httpd-2.4.6-17.el7.x86_64.rpm
安装httpd软件包、并可视化、并显示安装进度,-ivh为安装rpm软件包的经典选项组合。

[root@hollowman ~]#cd /media/cdrom/Packages
[root@hollowman Packages]# rpm -ivh httpd-2.4.6-17.el7.x86_64.rpm 
warning: httpd-2.4.6-17.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
error: Failed dependencies:
	httpd-tools = 2.4.6-17.el7 is needed by httpd-2.4.6-17.el7.x86_64

从信息提示我们可以发现,httpd需要先安装依赖包httpd-tools

[root@hollowman Packages]# rpm -ivh httpd-tools-2.4.6-17.el7.x86_64.rpm
warning: httpd-tools-2.4.6-17.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:httpd-tools-2.4.6-17.el7         ################################# [100%]

再次安装httpd软件包,这回成功安装。

[root@hollowman Packages]# rpm -ivh httpd-2.4.6-17.el7.x86_64.rpm
warning: httpd-2.4.6-17.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID fd431d51: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:httpd-2.4.6-17.el7               ################################# [100%]

rpm -qa
-qa选项表示查询所有软件包(单独的-a选项并不完整,需要与-q选项结合,查询+所有=查询所有软件包)
rpm -qa|grep httpd
通过管道符和grep命令来实现查询所有包含httpd的软件包

[root@hollowman ~]# rpm -qa|grep httpd
httpd-tools-2.4.6-17.el7.x86_64
httpd-2.4.6-17.el7.x86_64

可以看出,刚才安装的2个包含httpd的软件包都显示出来了。
rpm -qi httpd
查询已经安装的httpd软件的信息(看参数字面意思,查询+安装=查询已经安装的软件包),这里只需要输入软件包名的简写即可,也就是上面查询出来的httpd-2.4.6-17.el7.x86_64软件的缩写,当然也可以输入软件包全名。

[root@hollowman ~]# rpm -qi httpd
Name        : httpd
Version     : 2.4.6
Release     : 17.el7
Architecture: x86_64
Install Date: Thu 10 Dec 2020 10:36:43 PM CST
Group       : System Environment/Daemons
Size        : 3863865
License     : ASL 2.0
Signature   : RSA/SHA256, Wed 02 Apr 2014 01:54:28 AM CST, Key ID 199e2f91fd431d51
Source RPM  : httpd-2.4.6-17.el7.src.rpm
Build Date  : Thu 20 Mar 2014 07:17:12 PM CST
Build Host  : x86-024.build.eng.bos.redhat.com
Relocations : (not relocatable)
Packager    : Red Hat, Inc. <http://bugzilla.redhat.com/bugzilla>
Vendor      : Red Hat, Inc.
URL         : http://httpd.apache.org/
Summary     : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.

rpm -e httpd
卸载httpd软件包组合,一般按照依赖关系,与安装顺序相反,因为安装顺序为httpd-tools,httpd,所有卸载时最好反向卸载。同理,后面的软件包名只要输入软件包缩写即可。
rpm -e httpd-tools
卸载httpd-tools软件包
rpm -qf 文件名
查询文件名属于哪个软件包