linux rpm包管理和安装 | Leezhiy Blog

linux rpm包管理和安装

软件包管理简介

软件包分类

软件包分为两大类:源码包和二进制包(RPM包、系统默认包)。

  • 二进制包

    也叫RPM包,也是系统默认包,它是经过编译之后的安装包。不能看到它的源代码。二进制包实际上是软件的厂商在发行软件时,将源码包进行了编译和一些特定的设置。从而,简化了安装步骤,加快了安装速度。RPM包的文件名一般以 .rpm 结尾。

    注意:redhat系列的Linux系统(比如:CentOS)用的二进制包才是RPM包,Ubuntu和Debian系列的Linux系统用的二进制包是DEB包。

    redhat系列与Ubuntu和Debian系列的Linux系统的主要区别就在于二进制包的不同。

  • 源码包

    指的是直接把软件的源代码开放给用户的安装包。Linux最大的特点就是开源,它是用C语言编写的,所以绝大部分源码包也是用C语言编写的。源码包安装过程比较慢和复杂,而且容易报错。源码包可以到该软件的官方网站下载。它的文件名一般是以 .c 结尾,可以用写字板打开查看源代码。计算机能够识别的语言是二进制代码,也就是0或1组成的代码。要想让计算机识别源码包,就必须先将其编译为二进制代码。编译过程,需要C语言编译器gcc的支持。

    脚本安装包也是源码包的一种,它绝大多数是对源码包进行再开发之后的源码包。这种包比较少见,有点类似于Windows中的软件包,它的安装程序一般是install.sh,其安装过程非常简单,有简易的安装界面。

二进制包的优缺点

由于我的是CentOS的Linux系统,所以,这里就是指RPM包。

二进制包的优点:

  • 便于管理,只需通过几个命令就可以实现软件的安装、升级、查询和卸载。
  • 安装过程简单,安装速度比源码包快很多。

二进制包的缺点:

  • 已编译为二进制码,看不到源代码。
  • 功能选择不如源码包灵活。
  • 有依赖性的问题。

rpm包管理 - rpm命令管理

rpm包管理有两种方式:rpm命令管理和yum在线管理。

rpm包的命名规则

以Apache的rpm包(httpd-2.2.15-15.el6.centos.1.i686.rpm)为例。

script
1
2
3
4
5
6
7
httpd       软件的包名
2.2.15 软件的版本
15 软件发布的次数
el6.centos 适合的Linux平台
i686 适合的硬件平台(x64表示只适合64位的处理器,noarch表示适合所有的硬件平台)
.rpm 软件包的扩展名(在Linux系统中其实是没有扩展名的,这里的扩展名,是为了让管理员便于区分和识别)
httpd-2.2.15-15.el6.centos.1.i686.rpm 软件的包全名

rpm包的依赖性

  • 树形依赖:a → b → c

    装软件包a,需要先安装软件包b,装软件包b,又需要先安装软件包c。估安装顺序是 c b a ,卸载顺序则是 a b c。

  • 环形依赖:a → b → c → a

    解决方法:把软件包a、b、c用一条命令同时安装。

  • 模块(库)依赖

    模块依赖的查询网站 www.rpmfind.net。只要被依赖的包是以 .so.数字 结尾,这种依赖关系就是库(模块)依赖。

    这种库依赖的包不是单独存在的包,它是某个软件包中的一个软件(模块),因此只需安装它所在的软件包即可。这时,我们就必须要知道该软件(模块)属于哪个软件包。可以通过网站 www.rpmfind.net 进行查询。

rpm包的包全名和包名

包全名: 操作的包是没有安装的软件包时,要使用包全名,而且要注意路径。安装和升级时,使用包全名。

包名: 操作的是已经安装的软件包时,要使用包名。系统会自动搜索 /var/lib/rpm/ 中的数据库。不需要写路径。查询和卸载时,使用包名。

rpm安装命令

script
1
2
3
4
5
6
7
8
rpm -ivh 包全名

选项:

-i 执行安装(install)
-v 显示详细信息(verbose)
-h 显示进度(hash)
--nodeps 不检测依懒性

由于使用rpm命令安装rpm包,需要手动来解决各种依赖性问题,步骤过于复杂,故在此不作详解。后面,我们可以利用yum命令在线安装rpm包,它会自动解决依赖性,实现快速安装。

rpm升级命令

script
1
2
3
4
5
6
7
rpm -Uvh 包全名

选项:

-U 升级(upgrade)
-v 显示详细信息(verbose)
-h 显示进度(hash)

rpm卸载命令

注意:使用rpm命令进行卸载也会有依赖性的问题

script
1
2
3
4
5
6
rpm -e 包名

选项:

-e 卸载(erase)
--nodeps 不检查依赖性

rpm查询命令

rpm的查询命令要比rpm的安装、升级和卸载命令有用的多,安装、升级和卸载主要采用yum命令。

选项:

script
1
2
3
4
5
6
7
-q  查询(query)
-a 所有(all)
-i 查询rpm包的详细信息(information)
-p 查询未安装的rpm包信息(rpm包的信息是在软件安装之前就已经写好了,查询未安装的rpm包信息时,要使用包全名)
-l 列表信息(list)
-f 查询指定的文件属于哪个rpm包(file)
-R 查询软件包的依赖性(requires)

常见用法:

script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
rpm -q httpd
查询是否安装了rpm包的apache

rpm -qa
查询系统中所有已经安装的rpm包

rpm -qa | grep httpd
查询系统中所有已安装的和httpd相关的rpm包

rpm -qi httpd
查询已安装的apache软件的详细信息

rpm -qip httpd-2.2.15-15.el6.centos.1.i686.rpm
查询未安装的rpm包的详细信息(需要用包全名且注意路径)

rpm -ql httpd
查询已安装的apache软件的各个文件的安装位置

rpm -qlp httpd-2.2.15-15.el6.centos.1.i686.rpm
查询未安装的rpm包中的文件打算安装的位置(安装位置在rpm包安装之前就已经计划好了,估就算没有安装,也可以查询)

rpm -qf 文件名
通过系统中已知的文件名,查询它所属于的rpm包

rpm -qR 包名
查询已安装的rpm包的依赖性

rpm -qRp 包全名
查询未安装的rpm包的依赖性

rpm校验命令

主要是将rpm包当前的状态和初始安装的状态进行比较,校验哪些文件发生了更改。

script
1
2
3
4
5
rpm -V 包名

选项:

-V 检验已安装的RPM包中的文件(verify)

常见用法:

script
1
2
rpm -V httpd    
把Apache现在的状态和安装后的初始状态进行比较,从而检验哪些文件作了修改

如果输出以下内容,则表示配置文件被修改了。

script
1
S.5....T.   c  /etc/httpd/conf/httpd.conf

校验结果中的8个信息的具体说明如下( . 代表没有变化):

script
1
2
3
4
5
6
7
8
S   表示文件大小变了
M 表示文件的类型或者文件的权限变了
5 表示md5的校验和变了(可以看成是文件的内容变了)
D 表示设备代码信息变了
L 表示文件的路径变了
U 表示文件的所有者变了
G 表示文件的所属组变了
T 表示文件的修改时间变了

文件类型:

script
1
2
3
4
5
c   配置文件(config file)
d 普通文档(documentation)
g "鬼"文件(ghost file),很少见,如果显示g,表示该文件不应该被这个rpm包包含
l 授权文件(license file)
r 描述文件(read me)

rpm提取文件命令

从rpm包中提取某个文件,主要用于系统的命令文件被误删除或误操作后的修复,避免重装系统或重装相关的rpm包所带来的麻烦。

script
1
2
rpm2cpio 包全名 | cpio -idv .指定文件的绝对路径 
用cpio命令从rpm包中提取指定的文件,点 . 表示提取出来的文件存放的位置是当前目录

rpm2cpio命令,可以将rpm包转换为cpio格式的文件。

cpio命令是一个标准工具,用于创建软件档案文件或者从档案文件中提取文件。

rpm包管理 - yum命令管理

yum在线管理工具对CentOS系统是完全免费的,使用yum命令可以快速安装rpm包,yum命令最大的好处是它可以自动解决依赖性的问题。

网络yum源

CentOS的网络yum源默认是已经配好了,只要你的Linux系统连接了外网,就可以利用该网络yum源进行各种RPM包的安装、升级和卸载。

网络yum源的配置文件为:/etc/yum.repos.d/CentOS-Base.repo。

本地光盘yum源的配置文件为:/etc/yum.repos.d/CentOS-Media.repo。

网络yum源的配置文件的默认内容如下:

script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

#contrib - packages by Centos Users
[contrib]
name=CentOS-$releasever - Contrib
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=contrib&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/contrib/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

共有5个软件池:[base]、[updates]、[extras]、[centosplus]和[contrib]。默认是第一个软件池(即base)生效。

base软件池的说明:

script
1
2
3
4
5
6
7
[base]      软件池的名称,一定要放在[]中.
name 容器说明,可以自己随便写.
mirrorlist 镜像站点(可以将其注释掉,mirrorlist和baseurl只开启一个即可).
baseurl yum源服务器的地址.默认是CentOS官方的yum源服务器,如果你觉得慢,可以改成其他的yum源地址.
enabled 此容器是否生效,如果不写或写成enabled=1都是生效.
gpgcheck 如果是1,表示RPM的数字证书生效.
gpgkey 数字证书的公钥文件的保存位置.(不用修改)

一般来说,网络yum源默认就配置好了,而且可用,不用去修改该配置文件。

常用的yum命令

script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
yum list        
查询yum源中所有可用的rpm包列表.

yum search 关键字
搜索yum源中和关键字(一般用软件名)相关的rpm包.

yum -y install 软件名
利用yum命令安装某个软件,-y 表示自动回答yes.

yum -y install gcc
安装rpm包的gcc软件(gcc是一个C语言的编译器).

yum -y update 软件名
软件的升级.
注意: 如果update后面没有跟软件名,会升级所有的rpm包,包括Linux的内核,需要在本地重新配置好才能恢复.

yum -y remove 软件名
软件的卸载.
注意: 如果remove后面没有跟包名,会卸载所有的rpm包.就算跟了包名,也可能造成依赖性的连锁卸载问题.
yum卸载命令很容易造成问题,尽量不要使用.
安装Linux系统时,建议最小化安装,不要安装多余的软件,安装后,尽量少卸载.

yum grouplist
查询yum源中所有可用的软件组列表.

yum groupinstall 软件组名
安装指定的软件组.
注意: 软件组名只能用英文,如果中间包含空格,就用引号括起来.

yum groupremove 软件组名
卸载指定的软件组.
Buy me a cup of milkshake 🍨.
------------- 💖 🌞 本 文 结 束 😚 感 谢 您 的 阅 读 🌞 💖 -------------

欢迎关注我的其它发布渠道