引言
本文主要梳理 Linux 系统中的软件包的概念,同时介绍RPM与YUM两大核心管理工具的常用指令、区别联系以及实战技巧等。本文作为作者学习Linux系统的第11篇文章,依旧旨在总结当前的学习内容,同时巩固知识以便日后的学习复习回顾。如有说的不对的地方,还请大佬指正!!
目录
引言
1. Linux系统中的软件包
1.1 什么是软件包
1.2 软件包的格式与命名规则
1.3 软件包的依赖问题
2. RPM:基础软件包管理工具
2.1 查询 RPM 包/软件信息
2.2 安装 RPM 包
2.3 卸载 RPM 包
3. YUM:高级软件仓库管理工具
3.1 YUM 软件仓库配置
3.1 YUM 安装软件
3.2 YUM 更新软件
3.3 YUM 查询仓库软件
1. Linux系统中的软件包
1.1 什么是软件包
简单来说就是已经将软件的二进制文件、配置文件、手册页等 "打包" 好的文件,方便在Linux系统中进行安装、卸载、管理等。一开始我以为是类似于Windows系统的软件安装包或者是压缩文件,但其实并不是,就是一个软件,而是类似于Windows的 .exe 文件,被整合成一个package的形式。
软件包的格式有所差异,如 RedHat 系用 rpm,Debian 系用 deb,但是整体使用 rpm 为多,本篇也以 rpm 进行介绍。
1.2 软件包的格式与命名规则
以 rpm 为例,软件包的基本格式为
软件名-版本号-发布次数.硬件平台.rpm
实例:
tree-1.8.0-1.el8.x86_64.rpm
-
tree
:软件名称 -
1.8.0
:主版本号.次版本号.修订号 -
1
:发布次数 (同一个版本源码打了第几次包) -
el8
:适用于 Enterprise Linux 8 (CentOS 8/RHEL 8) -
x86_64
:硬件平台 (64位 Intel/AMD CPU)
1.3 软件包的依赖问题
Linux系统的软件包的一个核心问题就是很多软件需要相互之间进行依赖才能够运行。
也就是说当我要运行或者是安装A软件时,必须先安装B和C软件。或者是我要卸载A软件时,B软件是依赖A软件的,如果卸载了A软件,B软件也使用不了。
软件包来源分散,需要用户自己寻找。
2. RPM:基础软件包管理工具
RPM的作用是对单个以 .rpm 结尾的软件包文件进行基本的安装、查询、卸载、验证等操作,不能自动解决依赖关系
2.1 查询 RPM 包/软件信息
查询已安装的软件包:
-
rpm -qa
:查询所有已安装的rpm包 (q = query, a = all) -
rpm -q [软件名]
:查询指定软件是否安装 (e.g.rpm -q tree
) -
rpm -qi [软件名]
:查询指定软件的详细信息 (i = information) - 版本,发行号,安装时间,描述等。 -
rpm -ql [软件名]
:查询指定软件安装的文件列表 (l = list) - 非常重要!知道软件装了什么文件,装在哪里。 -
rpm -qc [软件名]
:查询指定软件的配置文件 (c = config files) - 通常都在/etc
下。 -
rpm -qd [软件名]
:查询指定软件的文档文件 (d = documentation) - man pages, README等。 -
rpm -qf [文件名]
:查询某个文件是哪个软件包安装的 (f = file) - 非常有用! -
rpm -qR [软件名]
:查询指定软件的依赖 (R = requires) - 看这个软件运行需要什么。
查询未安装的软件包就在以上相关命令的 q 后面加上 p ,并指定 .rpm 文件路径代替软件名。
以 firefox 这个软件为例,我们详细介绍一些查询软件信息的相关指令
我们可以通过 rpm -qa + grep 查询是否存在某一个要查询的软件包
如果我们想知道firefox这个软件包的文件列表,下载了什么文件,我们也可以通过 rpm -ql 查看
如果我们想知道某款软件包我们是否下载,也可以通过 rpm -q 查看
如果我们想知道某个软件包的详细信息,也可以通过 rpm -qi 查看
2.2 安装 RPM 包
安装一个 RPM 软件包的 基本指令是
rpm -ivh [包全名]
这里的 ivh 解析:
-
-i
:安装 (install) -
-v
:显示详细信息 (verbose) -
-h
:显示安装进度条 (hash)
安装指令的相关选项
-
--nodeps
:强制安装,忽略依赖。 (危险!可能导致软件无法运行,仅在明确知道后果时使用) -
--force
:强制覆盖安装。 (常用于替换现有文件或损坏的包,也需谨慎)
2.3 卸载 RPM 包
卸载软件包的基本指令是
rpm -e [软件名]
这里的 -e 的意思是 erase ,常用选项是 --nodeps
:强制卸载,忽略依赖。 (危险!可能破坏依赖此软件的其他程序)
我们以卸载与重新安装 firefox 火狐浏览器为例介绍两种指令的使用。
我们先在系统终端检查时候安装了 firefox 这个软件包
可以看到我们是已经安装好的,接下来我们对火狐浏览器进行卸载。
rpm -e firefox # 对火狐浏览器进行卸载
可以看到发出了很多警告,但是没有关系,我们在应用程序上检查是否存在
可以看到,firefox浏览器已经被我们卸载。
那么我们需要重新安装firefox浏览器,那么必须要有firefox的软件安装包,可以再CentOS光盘上找到。我们点开桌面光盘,打开 Package。
里面又各种软件安装包,我们对firefox进行搜索。
将该文件复制到 我们系统的 /opt 目录下。
可以看到,我们成功将安装包复制到该目录下。我们在终端中输入安装指令。
rpm -ivh /opt/firefox-68.10.0-1.el7.centos.x86_64.rpm
可以看到已经正常安装了,那么我们再次检查一遍,firefox浏览器是否存在。
可以看到,已经安装完毕。
3. YUM:高级软件仓库管理工具
其核心作用是基于 RPM 软件包,通过软件仓库 (Repository) 的概念进行自动下载、安装软件,自动解决依赖关系。就好像是我们经常用到的应用商城。
而什么是软件仓库呢??是一个集中存放大量 RPM 软件包及其依赖关系的服务器目录。
配置文件位于 /etc/yum.repos.d/
目录下,以 .repo
结尾。
注意!!!! CentOS7官方已经停止对于YUM仓库的维护服务,我们系统所配置的镜像地址,所以我们现在使用yum就必须自己配置镜像地址。
下面给出教程
3.1 YUM 软件仓库配置
当我们使用yum相关命令时,会触发一下报错
Could not resolve host: mirrorlist.centos.org; 404 Not Found
我们以安装 tree 指令为例,tree指令的功能是以树的形式查看当前目录的目录结构。
可以看到我们不能使用yum命令,也不能下载安装tree指令。此时运行
yum install tree
会因无法连接仓库而失败。
首先我们需要注销失效的镜像地址,打开终端输入以下指令
# 1. 注释失效镜像地址
sudo sed -i 's/mirrorlist/#mirrorlist/g' /etc/yum.repos.d/CentOS-*
接下来,将可以原有的仓库替换成可用仓库。
# 2. 替换为可用仓库(vault.centos.org或国内镜像)
sudo sed -i 's|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g' /etc/yum.repos.d/CentOS-*
然后更新缓存,注意!这个过程很漫长,需要耐心等待。
# 3. 更新缓存
sudo yum clean all
sudo yum makecache
接下来我们就可以重新使用yum指令安装软件仓库内的各种软件包。
以安装tree指令为例
# 4. 安装tree
sudo yum install tree
当我们安装这个指令时,会让我们输入y/n是否下载
我们输入 y 即可下载完成
3.1 YUM 安装软件
-
yum install [软件名]
:从仓库安装最新版本的指定软件及其所有依赖。 -
yum install [软件名]-[版本号]
:安装指定版本的软件 (如果仓库有)。
3.2 YUM 更新软件
-
yum update [软件名]
:更新指定的软件到仓库中的最新版本(及其依赖)。 -
yum update
:更新系统中所有可以通过仓库升级的软件包(包括系统内核)。
3.3 YUM 查询仓库软件
-
yum list
:列出仓库中所有可用的软件包 (包括已安装和未安装)。 -
yum list installed
:列出所有已安装的软件包。 -
yum list available
:列出仓库中可用但尚未安装的软件包。 -
yum list updates
:列出所有可用的更新。 -
yum list [软件名]
/yum list [部分软件名]*
:搜索匹配的包。 -
yum info [软件名]
:显示软件包的详细信息 (类似rpm -qi
,但信息来自仓库元数据)。 yum search [关键词]
:在软件包描述、名称中搜索包含关键词的包。
与 RPM 单个软件包不同的是,YUM 可以自动解决软件包之间的依赖关系,但是还是需要自己手动配置好软件仓库,是日常工作的首选。
希望这篇总结能帮你梳理清楚 Linux 软件包管理的核心脉络!结合这个总结多加练习,你一定能熟练掌握 RPM 和 YUM。加油!
欢迎在评论区交流学习心得和遇到的问题!