RPM包管理器是由Red Hat推出的应用软件管理器(过去的RPM就是Red Hat Package Manager的缩写)。RPM包管理器是Linux系统中最早的软件包管理软件之一,也是目前最流行的软件包管理器,许多发行版都使用RPM作为默认的软件包管理软件。
一、RPM包管理器简介
【软件依赖性】
与Windows系统中的软件不同,Linux系统中的软件将不同的功能模块单独写入到不同的软件包中,最后将多个相互依存的软件包结合起来形成一个应用程序。虽然这在Windows中也经常使用,但Linux系统中的软件模块划分得更小、功能更单一。因此在安装功能性软件时,通常需要安装许多与其具有依赖关系的软件包,这就是Linux系统中的软件依赖性。
【RPM包管理器】
在早期的系统中,安装应用程序是一件非常麻烦的事情,需要编译许多软件包才能完成应用程序的安装。为了解决这个问题,Red Hat公司开发了一个包管理器,早期的包管理器名为Red Hat Package Manager。
虽然名中带有Red Hat,但这是一个基于GPL协议的开源软件。Red Hat公司鼓励广大的Linux系统发行商了解和使用RPM包管理器。由于Red Hat的积极推广,现在许多Linux发行版都使用RPM作为默认的包管理器。现在RPM的含义是RPM Package Manager,有RPM社区负责维护。
【RPM软件包名称格式】
RPM软件包名称都有一个固定的格式,以文件服务程序Samba的客户端软件包为例,格式为samba-client-3.0.33-3.7.el5.i386.rpm。这个软件包名称中各部分的含义如下:
samba-client:最前面的为软件包名称。
3.0.33-3.7:3.0.33表示软件包的主要版本号,紧跟在后面的3.7表示软件发布的次要版本号。
el5:表示适用于Red Hat Enterprise Linux 5系统。fc6表示适用于Fedora Core Linux 6系统。
i386:表示硬件平台。有些软件包的硬件平台为noarch,表示该软件包没有硬件平台的限制。
.rpm:表示这是一个RPM软件包。有些软件包最后是src.rpm,表示软件包内含有源代码。
二、rpm命令基本格式
【命令格式】
rpm [option…]
【常用选项】
q:使用查询模式。
a:查询所有软件包。
i:显示详细信息。如果指定了软件包,则安装软件包。
l:显示软件包的文件列表。
p:查询指定的软件包。
f:查询指定文件所属软件包。
v:显示命令执行过程。
h:安装软件包时显示进度信息。
e:卸载指定的软件包。
U:升级软件包。
force:长格式选项,强制操作,忽略操作过程中的冲突。
nodeps:长格式选项,忽略操作过程中的软件依赖性,强制操作。
oldpackages:忽略冲突,强制升级软件包。
在上面的选项中,显示详细信息选项i对应的长格式为info;而安装软件包时,其对应的长格式为install。这两个长格式对应的短格式选项都是i,使用时需注意区别。
三、使用rpm命令查询软件包
1、查询已安装的软件
(1)例如要查询系统中是否装有一个名为samba-client的软件包:
[root@localhost ~]# rpm -q samba-client
提示:使用选项q加软件包名的方式查询时,必须使用软件包全名,否则将无法查询到任何结果。
(2)有时可能会忘记某个软件包的具体名称,此时可以使用选项a显示系统中已经安装的所有软件包:
[root@localhost ~]# rpm -qa
(3)为了能够使用模糊查询,可以在查询全部软件包的同时,配合使用grep命令模糊查询。例如查询当前系统中软件名称包含ssh的软件包:
[root@localhost ~]# rpm -qa | grep ssh openssh-clients-4.3p2-24.el5 openssh-4.3p2-24.el5 openssh-server-4.3p2-24.el5 openssh-askpass-4.3p2-24.el5
(4)许多时候需要查看软件包的详细信息。这是可以配合使用选项i,显示指定软件包的详细信息。例如查看软件包chkconfig的详细信息:
[root@localhost ~]# rpm -qi chkconfig Name : chkconfig Relocations: (not relocatable) Version : 1.3.30.1 Vendor: Red Hat, Inc. Release : 1 Build Date: Sat 02 Dec 2006 03:29:31 AM CST Install Date: Tue 12 Nov 2013 11:52:00 PM CST Build Host: hs20-bc2-2.build.redhat.com ...
2、查询软件包中的文件
查询软件包中的文件主要使用选项l和f。
(1)查看软件包chkconfig中包含的详细文件列表:
[root@localhost ~]# rpm -ql chkconfig /etc/alternatives /etc/init.d /etc/rc.d/init.d /etc/rc.d/rc0.d /etc/rc.d/rc1.d ...
(2)查看软件包的安装文件中的文件列表,这时可以使用选项p指定输入的参数为一个软件包文件:
[root@localhost ~]# rpm -qpl samba-client-3.0.33-3.7.el5.i386.rpm
(3)也可以使用选项p和i查看软件包的概况:
[root@localhost ~]# rpm -qpi samba-client-3.0.33-3.7.el5.i386.rpm
(4)有时也可能需要反向查询一个文件对应的软件包,这种情况可能是无意中删除了一个文件,需要知道应该重新安装的软件包的名称。这是可以使用选项f指定要查询的文件。例如:
[root@localhost ~]# rpm -qf /bin/ls coreutils-5.97-12.1.el5
此时就可以重新安装命令输出的软件包,恢复删除的文件。
四、使用rpm命令安装软件包
注意:安装下载的软件包时,应该注意软件包对应的版本和硬件平台,否则可能出现无法安装或安装后无法正常使用的情况。
【获取软件包】
获取软件包有两种方法:(1)RHEL5.3的光盘(或光盘镜像)中自带的软件包,通常位于光盘根目录的Server子目录中。(2)从互联网下载软件包。
如果手边没有现成的安装光盘,也不知道软件的官方网站,可以尝试在Repoforge.org的软件仓库中查找。
Repoforge.org软件包仓库:http://pkgs.repoforge.org/ 它是一个专业提供软件包、源码的下载站点。
(1)最常用的安装选择组合:
[root@localhost ~]# rpm -ivh gcc-4.1.2-44.el5.i386.rpm
(2)许多安装包会遇到依赖性问题,即在安装应用程序之前,应该先安装能让应用程序正常工作的前提软件包。
如果遇到软件包存在依赖性问题,应该先安装软件所依赖的前提软件包,或在同一条命令中同时安装前提软件包(只需将多个rpm包以空格分开都放在rpm –ivh 后面即可)。
(3)有时管理员肯能需要忽略软件包的依赖性,强制安装软件包,此时可以使用选项nodeps,这个选项适合于依赖性错误的情况,例如有些软件包可能会依赖其自身或间接依赖其自身。
有时误删除一个文件,需要重新安装时,rpm命令会提示文件冲突,此时可以使用选项force忽略软件包、文件冲突,强制安装软件包。
五、使用rpm命令卸载软件包
[root@localhost ~]# rpm -e samba-client
六、使用rpm命令升级软件包
(1)使用选项U升级软件包(假设原来系统中安装了比bzip2-libs-1.0.3-3版本低的bzip2-libs版本,现在可以使用bzip2-libs-1.0.3-3.i386.rpm软件包升级原来的低版本为bzip2-libs-1.0.3-3版本):
[root@localhost Server]# rpm -Uvh bzip2-libs-1.0.3-3.i386.rpm
(2)由于系统中安装有低版本的软件,因此在安装过程中可能会出现冲突,导致升级失败,此时可以使用选项oldpackage强制升级:
[root@localhost Server]# rpm -Uvh --oldpackage bzip2-libs-1.0.3-3.i386.rpm