

很多刚接触 Linux 的朋友,第一次敲下这条命令:
yum install nginx心里多少都会冒出几个问题:
为什么装软件要用 yum?
为什么它有时候下载很慢?
为什么明明命令没错,却提示找不到包?
为什么教程总让你“换 yum 源”?
如果只把 yum 当成一条安装命令,这些问题就会越用越糊涂。因为 yum 背后真正重要的,不是 install 这个动作,而是 Linux 管理软件的一整套思路:
软件从哪里来,依赖怎么解决,版本怎么控制,系统如何知道一个包是否可信。
这篇上篇,我们先把 yum、软件仓库、镜像源和依赖解析这几件事讲清楚。
一、没有包管理器之前,装软件有多麻烦
在说 yum 之前,先想象一个更原始的场景。
你想在 Linux 上安装 nginx。
如果不用包管理器,通常要自己去官网找源码包,下载、解压,然后执行:
./configuremakesudo make install看起来只有几步,但新手很快就会遇到第一堵墙。
比如配置 nginx 时,系统可能提示:
./configure: error: the HTTP rewrite module requires the PCRE library.意思是缺少 PCRE。
你去安装 PCRE,回来继续编译,又可能看到:
HTTP gzip module requires zlib library又缺 zlib。
继续装 zlib,后面还可能缺 OpenSSL,或者版本不匹配。
这就是手动编译安装最折磨人的地方:软件不是孤零零运行的,它背后往往依赖一堆库和工具。
你要自己找依赖、装依赖、处理版本冲突,还要记住软件到底装到了哪里。
包管理器,就是为了解决这类重复、复杂、容易出错的问题而出现的。

二、yum 到底是什么
yum 是 RHEL 系 Linux 里经典的软件包管理工具,常见于 CentOS 7、RHEL 7 等系统。
它主要负责:
查找软件包 解析依赖关系 下载 RPM 包 调用底层 RPM 机制完成安装、升级、卸载 记录软件包信息 根据配置检查软件包签名
这里要区分两个概念。
rpm 更像底层安装工具,负责把一个具体的 .rpm 包安装到系统里。
yum 则更像上层管理工具,它知道去哪里找包,也知道一个包缺哪些依赖。
所以你可以粗略理解为:
rpm 负责“装这个包”,yum 负责“帮你找到这个包,并把它需要的东西一起安排好”。
在较新的 RHEL 系发行版里,比如 RHEL 8/9、Rocky Linux 8/9、AlmaLinux 8/9、Fedora,默认包管理器已经是 dnf。
很多系统里你仍然可以敲 yum,但它可能只是兼容入口,背后实际由 dnf 工作。
这不是错误,而是工具演进。
核心思路没有变:都是围绕软件仓库、元数据、依赖解析和 RPM 数据库进行管理。
三、yum 源不是 yum,它是软件仓库地址
很多人说“yum 源”,容易误以为 yum 本身就是源。
其实不是。
yum 是工具。
软件仓库,也就是 repo,才是真正存放软件包和元数据的地方。
镜像源,则是这些仓库在不同服务器上的复制站点。
你可以这样理解:
yum 是帮你取货的人,repo 是仓库,镜像源是离你更近的分仓。
当你执行:
sudo yum install nginxyum 不会凭空变出一个 nginx。
它会先读取本机的 repo 配置,找到可用仓库地址,再下载仓库元数据,确认有没有 nginx 这个包,以及它依赖哪些其他包。
repo 配置通常放在:
/etc/yum.repos.d/你可以这样查看:
ls -l /etc/yum.repos.d/常见文件名可能类似:
CentOS-Base.reporocky.repoepel.repo一个简化后的 repo 配置大概长这样:
[baseos]name=Rocky Linux $releasever - BaseOSbaseurl=https://mirrors.example.com/rocky/$releasever/BaseOS/$basearch/os/enabled=1gpgcheck=1gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial几个字段要看懂:
[baseos]是仓库 ID。name是显示名称。baseurl是仓库地址。enabled=1表示启用这个仓库。gpgcheck=1表示安装软件包时检查签名。$releasever会替换成系统版本。$basearch会替换成系统架构,比如x86_64。
所以,换源并不是改 yum 命令,而是在改系统“去哪里找软件包”。
四、为什么换镜像源能解决很多问题
新手遇到 yum 报错时,教程经常让你换源。
这不是玄学。
换源通常是在解决这几类问题。
第一,默认源访问慢。
如果系统默认访问海外服务器,下载速度可能很慢,甚至连接超时。
换成国内云厂商、高校或公司内部镜像站,速度通常会好很多。
第二,系统版本已经停止维护。
比如 CentOS Linux 8 已在 2021 年 12 月 31 日停止维护,CentOS Linux 7 已在 2024 年 6 月 30 日停止维护。
这类系统的原始仓库可能已经迁移到归档地址。继续使用旧地址,就容易出现元数据下载失败、找不到仓库等问题。
第三,仓库没有启用。
有些软件不在基础仓库里,而在额外仓库里,比如 EPEL。
如果没有启用对应仓库,yum install 就可能提示找不到包。
第四,包名或版本不匹配。
同一个软件在不同发行版、不同版本、不同仓库里,包名和版本可能不同。
所以“找不到包”不一定是 yum 坏了,也不一定换个源就必好。
正确排查顺序应该是:
cat /etc/os-releaseyum repolistyum search nginx先确认系统版本,再看启用了哪些仓库,最后搜索包名是否存在。

五、yum 安装软件时,背后做了什么
一次正常的 yum 安装,大致会经历这几步。
第一步,读取 repo 配置。
yum 会读取 /etc/yum.repos.d/ 里的 .repo 文件,确认哪些仓库启用,仓库地址在哪里。
第二步,下载或读取仓库元数据。
仓库里不只有 RPM 包,还有一套元数据,记录了包名、版本、架构、依赖关系、文件列表等信息。
第三步,解析依赖关系。
比如你安装 nginx,yum 会根据元数据判断它还需要哪些库或模块。
第四步,下载安装包。
yum 会从仓库下载对应的 RPM 包。
第五步,检查签名并调用 rpm 安装。
如果仓库配置启用了 gpgcheck=1,系统会检查软件包签名,确认软件包来源是否可信。
第六步,更新本地 RPM 数据库。
安装完成后,系统会记录这个包的名称、版本、文件路径等信息。
以后你查询、升级、卸载软件,都要依赖这些记录。
可以用下面的命令查看本机已安装的软件包:
rpm -qa | grep nginx也可以查看某个包安装了哪些文件:
rpm -ql nginx这就是 yum 的价值:它把找包、解析依赖、下载、安装、记录这些动作串成了标准流程。
六、上篇小结
yum 不只是安装命令,它背后是一套软件管理机制。
你真正需要理解的是这条链路:
repo 配置 -> 镜像源 -> 仓库元数据 -> 依赖解析 -> RPM 包 -> 本地 RPM 数据库看懂这条链路之后,再遇到 yum 安装慢、找不到包、依赖冲突、换源失败,就不会只会复制教程里的命令。
下篇我们继续讲实操部分:
怎么安全换 yum 源 怎么启用 EPEL 离线安装应该怎么做 yum update和yum upgrade到底有什么区别生产环境为什么不能随便 yum update -y

END






夜雨聆风