本节讲解如何使用rpm命令对RPM二进制包进行安装、卸载和升级操作。
我们以安装apache程序为例。因为后续章节还会介绍使用源码包的方式安装apache程序,读者可以直观地感受到源码包和RPM包的区别。

RPM包默认安装路径

通常情况下,RPM包采用系统默认的安装路径,所有安装文件会按照类别分散安装到表1所示的目录中。

RPM包的默认安装路径是可以通过命令查询的。
除此之外,RPM包也支持手动指定安装路径,但此方式并不推荐。因为一旦手动指定安装路径,所有的安装文件会集中安装到指定位置,且系统中用来查询安装路径的命令也无法使用(需要进行手工配置才能被系统识别),得不偿失。
与RPM包不同,源码包的安装通常采用手动指定安装路径(习惯安装到/usr/local/中)的方式。既然安装路径不同,同一apache程序的源码包和RPM包就可以安装到一台Linux服务器上(但同一时间只能开启一个,因为它们需要占用同一个80端口)。
实际情况中,一台服务器几乎不会同时包含两个apache程序,管理员不好管理,还会占用过多的服务器磁盘空间。

RPM包的安装

安装RPM的命令格式为:

[root@localhost~]#rpm-ivh包全名

注意一定是包全名。涉及到包全名的命令,一定要注意路径,可能软件包在光盘中,因此需提前做好设备的挂载工作。

此命令中各选项参数的含义为:

  • -i:安装(install);
  • -v:显示更详细的信息(verbose);
  • -h:打印#,显示安装进度(hash);


例如,使用此命令安装apache软件包,如下所示:

[root@localhost~]#rpm-ivh
/mnt/cdrom/Packages/httpd-2.2.15-15.el6.centos.1.i686.rpm
Preparing...
####################
[100%]
1:httpd
####################
[100%]

注意,直到出现两个100%才是真正的安装成功,第一个100%仅表示完成了安装准备工作。
此命令还可以一次性安装多个软件包,仅需将包全名用空格分开即可,如下所示:

[root@localhost~]#rpm-ivha.rpmb.rpmc.rpm

如果还有其他安装要求(比如强制安装某软件而不管它是否有依赖性),可以通过以下选项进行调整:

  • -nodeps:不检测依赖性安装。软件安装时会检测依赖性,确定所需的底层软件是否安装,如果没有安装则会报错。如果不管依赖性,想强制安装,则可以使用这个选项。注意,这样不检测依赖性安装的软件基本上是不能使用的,所以不建议这样做。
  • -replacefiles:替换文件安装。如果要安装软件包,但是包中的部分文件已经存在,那么在正常安装时会报"某个文件已经存在"的错误,从而导致软件无法安装。使用这个选项可以忽略这个报错而覆盖安装。
  • -replacepkgs:替换软件包安装。如果软件包已经安装,那么此选项可以把软件包重复安装一遍。
  • -force:强制安装。不管是否已经安装,都重新安装。也就是-replacefiles和-replacepkgs的综合。
  • -test:测试安装。不会实际安装,只是检测一下依赖性。
  • -prefix:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径。


apache服务安装完成后,可以尝试启动:

[root@localhost~]#service服务名start|stop|restart|status

各参数含义:

  • start:启动服务;
  • stop:停止服务;
  • restart:重启服务;
  • status:查看服务状态;


例如:

[root@localhost~]#servicehttpdstart#启动apache服务

服务启动后,可以查看端口号80是否出现。命令如下:

[root@localhost~]#netstat-tlun|grep80
tcp00:::80:::*LISTEN

也可以在浏览器中输入Linux服务器的IP地址,访问这个apache服务器。目前在apache中没有建立任何网页,所以看到的只是测试页,如图2所示。

也可以在浏览器中输入Linux服务器的IP地址,访问这个apache服务器。目前在apache中没有建立任何网页,所以看到的只是测试页,如图2所示。

图2apache测试页 RPM包的升级

使用如下命令即可实现RPM包的升级:

[root@localhost~]#rpm-Uvh包全名

-U(大写)选项的含义是:如果该软件没安装过则直接安装;若没安装则升级至最新版本。

[root@localhost~]#rpm-Fvh包全名

-F(大写)选项的含义是:如果该软件没有安装,则不会安装,必须安装有较低版本才能升级。

RPM包的卸载

RPM软件包的卸载要考虑包之间的依赖性。例如,我们先安装的httpd软件包,后安装httpd的功能模块mod_ssl包,那么在卸载时,就必须先卸载mod_ssl,然后卸载httpd,否则会报错。

软件包卸载和拆除大楼是一样的,本来先盖的2楼,后盖的3楼,那么拆楼时一定要先拆除3楼。

如果卸载RPM软件不考虑依赖性,执行卸载命令会包依赖性错误,例如:

[root@localhost~]#rpm-ehttpd
error:Faileddependencies:
httpd-mmn=20051115isneededby(installed)mod_wsgi-3.2-1.el6.i686
httpd-mmn=20051115isneededby(installed)php-5.3.3-3.el6_2.8.i686
httpd-mmn=20051115isneededby(installed)mod_ssl-1:2.2.15-15.el6.
centos.1.i686
httpd-mmn=20051115isneededby(installed)mod_perl-2.0.4-10.el6.i686
httpd=2.2.15-15.el6.centos.1isneededby(installed)httpd-manual-2.2.
15-15.el6.centos.1.noarch
httpdisneededby(installed)webalizer-2.21_02-3.3.el6.i686
httpdisneededby(installed)mod_ssl-1:2.2.15-15.el6.centos.1.i686
httpd=0:2.2.15-15.el6.centos.1isneededby(installed)mod_ssl-1:2.2.15-15.el6.centos.1.i686

RPM软件包的卸载很简单,使用如下命令即可:

[root@localhost~]#rpm-e包名

-e选项表示卸载,也就是erase的首字母。
RPM软件包的卸载命令支持使用“-nocteps”选项,即可以不检测依赖性直接卸载,但此方式不推荐大家使用,因为此操作很可能导致其他软件也无法征程使用。

感谢开源软件为我们工作效率和生活质量带来的便利与价值,感谢为开源软件开发和推广使用做出努力的人们,本文知识来源于网络,大仁笔记收集整理,如果觉得不错欢迎点赞、收藏、转发。

我是@大仁笔记,欢迎大家学习交流,一起为更好的明天好好努力。