Hi,
有钱终成眷属
没钱亲眼目睹

Linux RPM包的特点、安装、升级和卸载方法

本文最后更新于2021年2月9日,已超过 3 年没有更新,如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

在Linux系统中,程序安装一般有两种安装方式,一种称为“源码包”,一种为RPM包。今天主要说的是RMP的特点及安装方式。

首先,要说的是RPM 包的优点:

  • 包管理系统简单,只通过几个命令就可以实现包的安装、升级、査询和卸载。
  • 安装速度比源码包安装快得多。

RPM 包的缺点:

  • 经过编译,不能在看到源代码。
  • 功能选择不如源码包灵活。
  • 依赖性。有时我们会发现,在安装软件包 a 时需要先安装 b 和 c,而在安装 b 时需要先安装 d 和 e。这就需要先安装 d 和 e,再安装 b 和 c,最后才能安装 a。比如,我买了一个漂亮的灯具,打算安装在客厅里,可是在安装灯具之前,客厅需要有顶棚,并且顶棚需要刷好油漆。安装软件和装修及其类似,需要有一定的顺序,但是有时依赖性会非常强。

下面将说明RPM包的安装、升级及卸载方法

RPM 包默认安装路径

RPM 包一般采用系统默认路径安装,安装路径如下:

/etc/              配置文件安装目录
/usr/bin/          可执行的命令安装目录
/usr/lib/          程序所使用的函数库保存位置
/usr/share/doc/    基本的软件使用手册保存位置
/usr/share/man/    帮助文件保存位置
 
注意:RPm可以指定安装路径,但是一旦手工指定安装路径,所有的安装文件就会安装到手工指定位置,而不会安装到系统默认位置。而系统的默认搜索位置并不会改变,依然会去默认位置之下搜索,当然系统就不能直接找到所需的文件,也就失去了作为系统默认安装路径的一些好处。所以我们一般不会指定 RPM 包的安装路径,而使用默认安装路径。
RPM包的安装
[root@localhost ~]# rpm -ivh 包全名
#注意一定是包全名。如果是跟包全名的命令,则要注意路径,因为软件包在光盘当中
 
  • -i:安装(install);
  • -v:显示更详细的信息(verbose);
  • -h:打印 #,显示安装进度(hash);

例如,安装 apache 软件包,注意出现两个 100% 才是正确安装,第一个 100% 仅是在准备,第二个 100% 才是正确安装。如下所示:

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

如果打算同时安装多个软件包呢?可以用一条命令同时安装,将多个软件包用空格分开就可以了。

[root@localhost ~]# rpm -ivh a.rpm b.rpm c.rpm
#一次安装多个软件包
 

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

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

apache 服务安装成功后,尝试启动。命令如下:

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

参数:

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

例如:

[root@localhost ~]# service httpd start #启动apache服务
 

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

[root@localhost ~]# netstat -tlun | grep 80
tcp 0 0 :::80 :::* LISTEN
 
注意,RPM 包默认保存在系统光盘的 Packages(注意 P 大写)目录中,所以在安装软件前需要挂载光盘。

例如:

mkdir/mnt/cdrom <-建立挂载点
mount /dev/cdrom /mnt/cdrom <-挂载光盘
 

我们一直在说依赖性很麻烦,那么依赖性报错是什么样呢?我们来继续说说 gcc 这个软件,刚刚我们在写 hello.c 的时候假设这个软件已经安装成功了。其实,如果采用"基本服务器"方式安装 Linux 系统,那么 gcc 这个软件是没有安装的,需要我们手工安装,但是安装这个软件是会报依赖性错误的。

[root@localhost ~]# rpm -ivh /mnt/cdrom/Packages/ gcc-4.4.6-4.el6.i686.rpm
error: Failed dependencies: <―依赖性错误
cloog-ppi >= 0.15 is needed by gcc-4.4.6-4.el6.i686
cpp = 4.4.6-4.el6 is needed by gcc-4.4.6-4.el6.i686
glibc-devel >= 2.2.90-12 is needed by gcc-4.4.6-4.el6.i686
 

这里的依赖性很明显,需要我们先安装 cloog-ppl、cpp 和 glibc-devel 三个软件,其中:

  • ">="表示版本要大于或等于所显示版本;
  • "<="表示版本要小于或等于所显示版本;
  • "="表示版本要等于所显示版本;

我们当然可以手工安装,只是比较麻烦。那么,有办法让它自动解决依赖性,直接安装吗?有,我们可以使用 yum 在线安装工具,它会自动安装依赖的软件,帮助我们解决依赖性。所以,再卖一个关子,我们不在这里安装 gcc,留到安装 yum 的时候让 gcc 自动安装。

RPM包的升级

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

选项:
-U(大写):升级安装。如果没有安装过,则系统直接安装。如果安装过的版本较低,则升级到新版本(upgrade);

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

选项:
-F(大写):升级安装。如果没有安装过,则不会安装。必须安装有较低版本才能升级(freshen);

RPM包卸载

卸载是有依赖性的。比如,在安装的时候,要先安装 httpd 软件包,再安装 httpd 的功能模块 mod_ssl 包。那么,在卸载的时候,一定要先卸载 mod_ssl 软件包,再卸载 httpd 软件包,否则就会报错。软件包卸载和拆除大楼是一样的,你要拆除 2 楼和 3 楼,一定要先拆除 3 楼。
删除格式非常简单,如下:

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

选项:
-e 卸载(erase);
如果不按依赖性卸载,就会报依赖性错误。例如:

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

当然,卸载命令是支持"--nocteps"选项的,可以不检测依赖性直接卸载。但是,如果这样做,则很可能导致其他软件包无法正常使用,所以并不推荐这样卸载。

赞(0)
未经允许不得转载:伊阳博客 » Linux RPM包的特点、安装、升级和卸载方法

留言 抢沙发