『学了就忘』Linux软件包管理 — 41、RPM包的基本使用
1、RPM包命名规则
一个RPM包:httpd-2.2.15-15.e16.centos.1.i686.rpm
httpd
:软件包名。2.2.15
:软件版本。15
:软件发布的次数。el6/centos
:软件发行商。el6
是RedHat
公司发布,适合RHEL6.x
(Red Hat Enterprise Linux
)和CentOS6.x
下使用。(el6
指的就是RHEL6.x
平台)i686
:适合的硬件平台。RPM包可以在不同的硬件平台安装,选择适合不同CPU的软件版本,可以最大化的发挥CPU性能,所以出现了所谓的i386
(386
以上计算机都可以安装)、i586
(586
以上的计算机都可以安装)、i686
(奔腾II以上计算机都可以安装,目前所有的CPU都是奔腾II以上,所以这个软件版本居多)、x86_64
(64位CPU可以安装)和noarch
(没有硬件限制)等文件名。.rpm
:RPM包的扩展名。我们说过Linux下文件不是靠扩展名区分文件类型,也就是Linux中扩展名没有任何含义。可是这里怎么又出现了扩展名呢?原因很简单,如果我不把RPM包的扩展名叫做.rpm
,管理员很难知道这是一个RPM包,当然也就无法正确安装了。也就是说如果RPM包不用.rpm
作为扩展名,系统可以正确识别没有问题,可是管理员很难识别这是个什么样的文件。
注意
- 包全名:如果操作的是未安装软件包,则使用包全名,而且需要注意使用绝对路径(一般会进入到软件包目录进行安装)。
- 包名:如果操作的是已经安装的软件包,则使用包名即可。系统会生成RPM包的数据库(
/var/lib/rpm/
),只要安装过的软件包,就会出现在这个数据库中。而且可以在任意路径下操作(因为是从数据库中查找)。
提示:/var/lib/rpm/
这里边的文件都是二进制的,不能用vim
来查看。
2、RPM包安装
(1)安装命令
#注意一定是包全名。如果跟包全名的命令要注意路径
[root@localhost ~]# rpm -ivh 包全名
选项:
-i:install安装(install)
-v:显示更详细的信息(verbose)
-h:显示安装进度(hash)
(2)常用选项
--nodeps
:不检测依赖性安装。软件时会检测依赖性,确定所需的底层软件是否安装。如果没有安装则会报错。如果我不管依赖性,想强行安装,可以使用这个选项。
注意:这样不检测依赖性安装的软件基本是不能使用的,所以不建议这样做。
(这个选项在实际工作中,不要使用。)--replacefiles
:替换文件安装。如果安装软件包,可是包中部分文件已经存在,那么正常安装时候,会报错“某个文件已经存在”从而导致软件无法安装,使用这个选项可以忽视这个报错,而覆盖安装。(请看--force
)--replacepkgs
:替换软件包安装。如果软件包已经安装,此选项可以把软件包重复安装一遍。(请看--force
)--force
:强制安装。不管是否已经安装,都重新安装。就是--replacefiles
和--replacepkgs
的集合。
(所以上边两个选项--replacefiles
和--replacepkgs
不用记忆,只要记住--force
就好。应对误删除软件中文件的时候。覆盖安装代价最小,先不要考虑卸载。)--test
:测试安装。不会实际安装,只是检测一下依赖性。--prefix
:指定安装路径。为安装软件指定安装路径,而不使用默认安装路径(默认安装路径是软件作者决定的,他觉得安装在什么位置好,才设定的位置)。注意:如果指定了安装路径,软件没有安装到系统默认路径中的话,系统会找不到这些安装的软件,需要进行手工配置才能被系统识别。所以RPM包我们一般都采用默认路径安装。
不指定安装位置的好处:
1)默认安装位置是系统的习惯位置。
2)RPM包管理系统是有卸载命令的。(通过RPM数据库记录软件的安装位置),一条命令卸载,非常方便,并且卸载的很干净。如果你指定了安装目录,则RPM的删除命令就不好用了。
注:源码包安装的时候一定要指定软件的安装位置。
(3)RPM包默认安装位置
一般情况下RPM包的安装位置,不是所有的RPM包软件的安装位置都是这样。
安装的时候一定要两个进度条都100%才算安装成功,第一个进度条100%是准备安装。第二个进度条才是软件真正安装成功。
注意:每个RPM软件包的安装,随着不同的Linux系统版本,不同版本的RPM软件包,Linux上已安装程序的多少,所需要安装的软件包的数量是不同的。(因为安装的软件越多,已经安装的依赖包就越多,后边再安装的软件包有相同的依赖,就不再需要安装了。)
3、RPM安装方式的服务启动
[root@localhost ~]# service 服务名 start|stop|restart|status
参数:
start:启动服务
stop:停止服务
restart:重启服务
status:查看服务状态
# 下面命令也行
[root@localhost ~]# systemctl restart httpd
注意:
- 只有RPM包安装的软件才可以这样启动。源码包安装的软件是不能这样启动的。
- Linux系统中所有的执行文件都需要访问绝对路径,服务的启动也是如此。
/etc/rc.d/init.d/软件名 + start|stop|restart|status
也可以启动软件。这个是标准启动方法。/etc/init.d/httpd
也行和上边/etc/rc.d/init.d/
两个是软链接的关系。service
是Red Hat
专有命令,其他Linux系统不一定有。service
实际上就是搜索/init.d/
目录。
4、RPM安装方式的服务升级
[root@localhost ~]# rpm -Uvh 包全名
选项:
-U(大写):升级安装,如果没有安装过,系统直接安装。如果安装过的版本较旧,则升级到新版本(upgrade)
[root@localhost ~]# rpm -Fvh 包全名
选项:
-F(大写)升级安装,如果没有安装过,则不会安装。必须安装有较旧版本,才能升级(freshen)
5、RPM安装方式的服务卸载
[root@localhost ~]# rpm -e 包名(包名:可以在任意路径下操作)
选项:
-nodeps:不检查依赖性
-e:卸载
RPM包不仅安装的时候有依赖性,卸载的时候也是有依赖性的。安装的时候1234,卸载的时候需要4321。
(我们一般不会记住软件包安装的依赖性顺序,卸载的时候也会提示你依赖关系,按提示依次卸载。)
注意:
yum
命令也可以卸载RPM安装包,但是不建议直接用yum
卸载命令卸载软件。- 原因:
yum
卸载命令,一条命令直接卸载软件和其相依赖的软件。- 例如:
e
包依赖f
包,f
包依赖a
包,a
包依赖b
包,b
包依赖c
包,c
包依赖d
包(e—>f—>a—>b—>c—>d
)。如果我安装b
包,通过yum
命令一条命令,所有需要的依赖包都会自动安装好,也就是c
、d
包(也就是先安装d
包,在安装c
包,最后在安装b
包)。- 如果我现在要卸载
b
包,yum
卸载命令,会把b
包和依赖他的包,也就是e
、f
、a
包都一起卸载掉(也就是先卸载e
包,再卸载f
包,再卸载a
包,最后卸载b
包),但卸载的时候你不知道e
、f
、a
包干什么用的。这些包除了依赖b
包,可能其他的软件包也会依赖这些包中的一些包,这样会出现一些问题,会导致其他的依赖这些包的软件使用会出现问题。- 而且你不记住卸载的这些相关依赖包是什么,会导致你安装不回来(这个意思是,如果卸载
b
包,然后导致其他一些软件不能正常使用了,我想再通过yum
命令重新安装b
包,安装也是c
、d
包,也不会再是安装e
、f
、a
包,两个方向是相反的。)。yum
的卸载命令很霸道,初学者不建议使用yum
卸载命令做卸载操作。