Fork me on GitHub

Linux 入门总结(七)

Linux 入门总结(七) —— 软件包管理

RPM 包管理之 rpm 命令管理

1、Linux 软件包分类

  1. 源码包 (脚本安装包)
  2. 二进制包(RPM 包、系统默认包)

Linux 是 C 语言写的,这里指的源码包绝大多数都是 C 语言写的。源码包和二进制包最大的区别就是:源码包是直接开发完的源代码给你,而二进制包它是将经过编译以后的包给你,看不到源代码了。编译的时间会比较慢。在 Centos 中我们把二进制包称为 RPM(red hat package manage)包。

2、RPM 包命名规则
RPM 包命名规则

15 指的是在这个版本上发布了 15 次。el6.centos 指 rpm 包的这个版本可以在 RHEL6 和 Centos 这两个 Linux 版本上安装。noarch 表示任何硬件平台都可以安装。有的包没有写适合哪个 Linux 平台,则适合所有的 Linux 平台。

注意区分包名和包全名:

包全名:操作的包是没有安装的软件包时,使用包全名。而且要注意路径。上图的包全名为「httpd-2.2.15-15.el6.centos.1.i686.rpm」。一般是安装和升级的时候使用包全名,因为安装和升级的时候这些包都没有安装,操作的是未安装的包所以使用包全名。
包名:操作已经安装的软件包时,使用包名。是搜索 /var/lib/rpm 中的数据库。上图中的包名为「httpd」。一般查询、卸载这些命令操作的对象都是包名。

3、RPM 包依赖性
RPM 包依赖性

解决环形依赖:用一条命令把软件包 a、b、c 同时安装,就会解决环形依赖。

软件包库依赖(即模块依赖):库依赖有个特征,只要是用「.so.数字」结尾,这种包都是库依赖,这个库依赖的不是单独独立的包,它是某一个软件安装包里面的某一个软件。即只要你找到了这个软件所在的包,然后将其所在的包安装,那么这个软件就会随着包的安装而自动安装,就会解决依赖性问题。通过 www.rpmfind.net 查找某个软件属于哪个依赖包。

4、RPM 包的安装、升级、卸载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
rpm 命令简介:
命令所在路径:/bin/rpm;作用:RPM 包管理器

格式:
rpm [选项] [包名/包全名]

选项:
-i 安装,install
-v 显示详细信息,verbose
-h 显示安装进度,hash
-U 升级,upgrade
-e 卸载,erase
--nodeps 不检测依赖性,「no/deps」

# 安装 RPM 包,注意包全名
rpm -ivh 包全名

# 升级 RPM 包,注意包全名
rpm -Uvh 包全名

# 卸载 RPM 包,注意包名
rpm -e 包名

注意:安装和卸载用 yum 更为简单,因为它会自动就解决依赖性。但是查询只能通过 rpm,因为 yum 没有 rpm 查询强大,使用 yum 查不了 rpm 那么多的信息,即 rpm 的查询是一个非常常用的功能,不管是通过 rpm 安装还是 yum 安装都可以通过 rpm 命令的查询方式来进行查询。

5、RPM 包的查询

(1)查询包是否安装,-q 查询(query)

1
2
3
4
rpm -q 包名

# 查询所有已经安装的 RPM 包
rpm -qa

注意:这里查询是从 Linux 后台系统数据库中取数据,所以不需要路径,任何位置都可以直接执行相应的命令。

(2)查询软件包详细信息,-i 查询软件包信息(information),-p 查询未安装包信息(package)

1
2
3
4
5
# 查询已安装包信息
rpm -qi 包名

# 查询未安装包信息
rpm -qip 包全名

(3)查询包中文件安装位置,-l 列表(list),-p 查询未安装包信息(package)

1
2
3
4
5
# 查询已安装包文件安装位置
rpm -ql 包名

# 查询未安装包文件安装位置
rpm -qlp 包全名

注意:软件包中文件的安装位置,一个软件包中不止有一个文件,所以使用 list,文件的安装位置(默认安装位置)是固定的,是在生产这个包的时候就已经决定了这个文件装在哪里是合理的,rpm 包可以手动指定安装位置,但是手动指定安装位置会带来一系列的问题,比如:服务管理命令找不到 rpm 的一些功能服务,很多服务其搜索的位置都是默认的,从而会带来一些问题。所以最好采用默认安装位置。

(4)查询系统文件属于哪个 RPM 包,-f 指定要查询的系统文件名(file)

1
rpm -qf 系统文件名

注意:这个系统文件必须是通过包装出来的,才能通过文件反查包。

(5)查询软件包的依赖性,-R 查询软件包依赖性(requires),-p 查询未安装包信息(package)

1
rpm -qR 包名

6、RPM 包校验

1
2
3
4
5
6
# 选项 -V 作用:校验指定 RPM 包中的文件(verify)
rpm -V 已安装的包名

举例:
# 如果结果没有任何输出,则表示没有任何改变;只有改变的情况才会有输出
rpm -V httpd

什么是校验?RPM 包安装之后,先把它的特征记录下来,然后当我需要的时候把现在的文件和原先的文件进行比较,查看文件之间的变化,从而判断现在的文件是否做了修改。我们使用校验是为了判断我们的系统文件是否被人进行了更改。

rpm -V
解析 rpm -V
解析 rpm -V
解析 rpm -V

如上图所示,如果有字母则表示其对应的项做了修改,如果用点表示,则表示其对应项没有修改,c 是标称文件的类型,c 表示 config 即配置文件的意思。

7、从 RPM 包中提取文件,即从 RPM 包中提取指定的某个或某些文件,主要是用来做修复的,如日常工作中不小心把某个文件给误删除了,这时候可能并不需要重新安装整个包,只需要把对应的文件提取出去并放到相应位置即可修复。

1
2
3
4
5
rpm2cpio 包全名 | cpio -idv .文件在包中的绝对路径

# rpm2cpio 命令的作用:将 rpm 包转换为 cpio 格式的文件

# cpio 是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件

rpm2cpio,由于 2 的英文发音 two 和 to 很像,所在 Linux 命令中经常用 2 表示从什么到什么的意思,此处表示从 rmp 格式转换为 cpio 格式。所有的 rmp 包都是 rpm 包格式的,只有把它转换成 cpio 格式的,才可以通过 cpio 命令把这个包中指定的文件提取出来。「\」在 Linux 表示一条命令没有输入完换行下面接着来。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
简介:
cpio 命令

格式:
cpio [选项] < [文件|设备]

选项:
-i copy-in 模式,还原
-d 还原时自动新建目录
-v 显示还原过程

举例:
# 查询 ls 命令属于哪个软件包
rpm -qf /bin/ls
# 造成 ls 命令误删假象
mv /bin/ls /tmp
# 提取 rpm 包中 ls 命令到当前目录的 /bin/ls 下
rpm2cpio /mnt/cdrom/Packages/coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls
# 把 ls 命令复制到 /bin 目录,修复丢失文件
cp /root/bin/ls /bin/

RPM 包管理之 yum 在线管理

注意:yum 是一个命令,管理的是 RPM 包,在红帽系列的 Linux 中认为 yum 是一个售后服务,所以有的是收费的。

1、IP 地址配置

1
2
3
4
5
# 启动网卡
vim /etc/sysconfig/network-scripts/ifcfg-eth0 将 ONBOOT 的值改为 yes

# 重启网络服务
service network restart

注意:有 IP 和子网掩码就可以在局域网内使用;如果要想访问互联网,Ip、子网掩码、DNS、网关缺一不可。

2、网络 yum 源
网路 yum 源配置格式
网络 yum 源
在 /etc/yum.repos.d/ 这个目录中,只要是以 .repo 结尾的,都是合法的 yum 源。默认是 Base 生效即网络 yum 源生效。

3、常用 yum 命令
(1) 查询

1
2
3
4
5
6
7
8
# 查询对应 yum 源中所有可用软件包列表
yum list

# 统计对应 yum 源中有多少个软件包
yum list | wc -l

# 搜索服务器上所有和关键字相关的包
yum search 关键字

注意:前面讲解的包名和包全名,只对 rpm 手工管理命令生效,即其使用范围仅限 rpm 手工管理范围。在 yum 中没有包名和包全名之分,只有包名。

(2) 安装

1
2
# install 安装,-y 自动回答 yes
yum -y install 包名

gcc 是 c 语言的编译器,在源码包安装的时候,必须有 gcc 存在,源码包才可以正常安装。

(3) 升级

1
2
# update 升级,-y 自动回答 yes
yum -y update 包名

注意:这个升级命令如果没有指定包名,只写了「yum -y update」,它的意思是升级所有的软件包,包括 Linux 内核都会升级,Linux 内核升级完成之后,是需要在本地做一定的配置,你的内核才可以正常使用,才可以启动,如果你是在远程执行的这条命令,你就会发现你的服务器怎么也开不了机了,永远也无法连接,这个时候,这条命令会导致服务器直接崩溃,所以升级命令慎重使用!!!

(4) 卸载

1
2
# remove 卸载,-y 自动回答 yes
yum -y remove 包名

注意:在使用 yum 卸载的时候,它会自动把依赖这个包的包全部卸载掉,有可能会造成系统崩溃。Linux 安装原则:安装的时候最小化安装,不安装多余软件。使用什么软件就安装什么软件,手工装,尽量不卸载,尤其是 yum 卸载,尽量不要多用。这个命令不建议使用!!!

4、yum 软件组管理命令

1
2
3
4
5
6
7
8
# 列出所有可用的软件组列表
yum grouplist

# 安装指定软件组,组名可以由 grouplist 查询出来
yum groupinstall 软件组名

# 卸载指定软件组
yum groupremove 软件组名

注意:如果软件包组名之间有空格,要用双引号括起来,使用的时候要使用英文组名,中文组名是不会被识别的。

5、光盘 yum 源搭建

1
2
3
4
5
6
7
8
9
10
11
1、挂载光盘
mount /dev/cdrom /mnt/cdrom

2、让网络 yum 源失效,即停用所有的网络 yum 源。取巧办法是将 /etc/yum.repos.d/ 文件夹下所有以 .repo 结尾的网络 yum 源改名
cd /etc/yum.repos.d/
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOs-Vault.repo CentOs-Vault.repo.bak

3、修改光盘 yum 源,配置光盘地址,enabled 设置为 1 表示开启光盘 yum 源
vim CentOS-Media.repo

光盘 yum 源配置信息

注意:系统在检测是否为有效 yum 源的时候是通过 .repo 这个后缀的,我们为了不打开一个个去修改,即将配置文件中的 yum 源容器的 enabled 全部设置为 0,所以此处选择了修改文件名的方式,这个简单粗暴省力。

光盘 yum 优点:本地不需要网络,下载更快;缺点:版本不能升级,即版本是固定的,需要连接光盘;注意:file 后面有三个 ///,前两个是固定格式「file://」最后一个代表根目录。对于多余的光盘地址,建议注释掉,虽然不影响使用,但是每次系统都会提示你多余的光盘地址找不的的信息。注意:指定 baseurl 为自己的光盘挂载地址。

注意:绝大多 Linux 的配置文件对注释都是有严格要求的,不光 # 前面不能加缩进,有一些配置文件甚至在 # 后面都不能加空格。如下所示:这种缩进的就会报错!!!
错误注释示例

源码包管理

1、rpm 包和源码包的区别

安装之前的区别:概念上的区别
安装之后的区别:安装位置不同

2、RPM 包默认安装位置
RPM 包默认安装路径

3、源码包安装位置
源码包的安装位置是要手工指定的,一般是「/usr/local/软件名」。/usr 目录是 Unix 系统资源目录,有一个 local 目录,本地的意思,是系统专门为我们准备安装外来应用的地方。我们在目录下创建一个对应软件名进行安装即可。

4、安装位置不同带来的影响
(1)RPM 包安装的服务可以使用系统服务管理命令(service)来管理,例如 RPM 包安装的 apache 的启动方法是:/etc/rc.d/init.d/httpd startservice httpd start。Linux 要想启动一个可执行文件(服务),都应该是利用绝对路径启动的。service 是 red hat 特有的,service 命令会自动的去 /etc/rc.d/init.d/ 下去寻找,找到了就执行,找不到就报错。类似 service 这种系统服务都会去默认的安装目录下去寻找,主要是 rmp 默认安装的位置,所以可以使用,但是源码包不行,只能是绝对路径启动。

(2)而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理,如:/usr/local/apache2/bin/apachectl start

小结:rpm 包和源码包由于安装的位置不同,所以带来了服务的管理方法不同。

5、源码包安装方法
(1)安装准备

安装 C 语言编译器

(2)安装注意事项

源代码保存位置:/usr/local/src
软件安装位置:/usr/local
如何确定安装过程是否报错?(1) echo $? 查看上条命令执行结果 (2) 安装过程停止,并且出现 error、warning 或 no 的提示

(3)源码包安装过程

下载源码包
解压缩下载的源码包
进入解压缩目录

(4)进入解压缩以后的安装目录,注意以下两个文件

INSTALL 安装说明,注意名字大写。README 使用说明,注意名字大写。 在 Linux 当中,任何一个源码包都有 INSTALL、README 类似的文件,碰到陌生的源代码的时候,需要先查看说明,再安装或使用源码包。

(5)软件配置与检查

软件配置与检查

可以使用「./configure –help」查看该源码包可用的配置项的帮助信息,会发现源码包安装会有很多的安装配置选项。此处我们只定义安装的目录为 ./configure --prefix=/usr/local/apache2,源码包的安装路径选项在安装的时候是一定要定义的,其他选项可以不定义。configure 配置的意思,即在安装源码包之前,把源代码中需要的配置都先配置好,为随后的检查、编译、安装做好准备。注意:Makefile 文件是要等到 ./configure 这条命令执行之后才会生成,里面包含软件的各种配置,是用来安装软件的。

(6)编译、安装

如果前面都通过的话,则执行命令 make 表示编译,如果没有报错的话,则执行 make install 表示安装。到此源码安装就完成了。至于软件安装完成以后如何启动的问题,可以参看源码包中的 INSTALL 等文档的说明。

注意:在执行 ./configure 和 make 命令的时候不会向 /usr/local 里面写入任何数据。如果在执行 make 的时候报错,则可以使用 make clean 清空编译的数据,这样可以达到完全清空。make install 才会向真正的目录写入数据。

6、源码包的卸载
不需要卸载命令,直接删除安装目录即可。不会遗留任何垃圾文件。

7、在 Linux 中,如果已经安装了 rpm 包的 httpd,可以再安装源码包的 httpd,因为安装位置不同,所以可以安装,但是没必要同时安装两个相同的软件。

推荐阅读

Bash 快捷建
Linux 上安装源码包
centos 软件包管理之 rpm 的使用
Linux 下 /usr 和 /var 的含义和内容

-------------本文结束感谢您的阅读-------------

本文标题:Linux 入门总结(七)

文章作者:Yan ChongSheng

发布时间:2018年10月18日

最后更新:2018年10月21日

原始链接:yanchongsheng.github.io/2018/10/18/Linux-2018-10-18-Linux入门总结-七/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

开启打赏模式