

上篇我们讲清楚了 yum 的底层逻辑。
它不是简单执行一个安装命令,而是围绕 repo 配置、镜像源、元数据、依赖关系和 RPM 数据库完成软件管理。
这一篇我们进入实操。
但先说一句很重要的话:
换 yum 源不是“提速小技巧”,而是在改变系统信任的软件来源。
测试机上可以大胆一点,生产环境里一定要谨慎。
一、换源前,先确认系统版本
换源之前,第一步不是复制命令,而是确认系统到底是什么。
cat /etc/os-release你会看到类似信息:
NAME="Rocky Linux"VERSION="9.4 (Blue Onyx)"ID="rocky"VERSION_ID="9.4"这一步非常关键。
CentOS 7、CentOS 8、Rocky Linux 9、AlmaLinux 9、Fedora 的仓库路径都不一样。
不要拿 CentOS 7 的 repo 文件去套 Rocky Linux 9。
也不要把已经停止维护的 CentOS Linux 8 当成普通 CentOS 8 镜像源来处理。
版本不匹配,是很多 yum 源故障的根源。
二、改源前一定要备份
repo 文件一般放在:
/etc/yum.repos.d/改之前先备份:
sudo mkdir -p /etc/yum.repos.d/backupsudo cp /etc/yum.repos.d/*.repo /etc/yum.repos.d/backup/这样改错了还能恢复:
sudo cp /etc/yum.repos.d/backup/*.repo /etc/yum.repos.d/这一步看起来普通,但在生产环境里很重要。
很多线上故障不是因为技术多复杂,而是因为改配置前没有留退路。

三、换源后要清理并重建缓存
repo 文件改完之后,建议清理旧缓存,再重新生成缓存。
sudo yum clean allsudo yum makecache如果系统使用的是 dnf:
sudo dnf clean allsudo dnf makecacheclean all 会清理旧的仓库缓存。
makecache 会重新下载仓库元数据。
很多人换源后仍然报错,就是因为系统还在使用旧缓存,或者新仓库元数据还没正确下载。
你还可以查看当前启用的仓库:
yum repolist较新的系统也可以用:
dnf repolist四、找不到包时,不要只会换源
遇到:
No package nginx available.很多人的第一反应是换源。
但更稳的排查顺序应该是这样。
先确认仓库列表:
yum repolist再搜索包名:
yum search nginx如果包确实不在基础仓库里,再考虑启用额外仓库。
在 CentOS 7、RHEL 兼容发行版里,很多常用扩展包来自 EPEL。
sudo yum install -y epel-release然后再次生成缓存:
sudo yum makecache注意,EPEL 不是万能源。
它是 Extra Packages for Enterprise Linux,提供很多基础仓库之外的软件包,但必须和你的发行版版本匹配。
生产环境启用 EPEL 前,最好先确认公司是否允许使用,以及是否需要固定版本。
五、离线安装不要乱用 --nodeps
原文里最需要修正的一点,是离线安装方式。
很多教程会教你把 RPM 包拷到离线机器上,然后执行:
rpm -Uvh --force --nodeps *.rpm这条命令不建议作为常规方案。
--nodeps 会跳过依赖检查。
--force 会强制覆盖或替换某些内容。
它们能让命令“看起来执行成功”,但可能把系统依赖关系搞乱,后面排查会非常痛苦。
更稳的做法,是在同版本、同架构、同仓库配置的联网机器上,把目标包和依赖一起下载下来。
CentOS 7 可以先安装工具:
sudo yum install -y yum-utils然后下载目标包和依赖:
mkdir -p /tmp/nginx-rpmsyumdownloader --resolve --destdir=/tmp/nginx-rpms nginx把整个目录拷贝到离线机器后,进入目录安装:
cd /tmp/nginx-rpmssudo yum localinstall -y ./*.rpm如果是 dnf 系统,也可以使用:
dnf download --resolve --destdir=/tmp/nginx-rpms nginx更规范的企业做法,是在内网搭建本地 yum 仓库,而不是每次手工拷一堆 RPM。
可以用 createrepo 生成本地仓库元数据,再让离线服务器统一指向内网 repo。

六、装错版本了,怎么回退
先查看仓库里有哪些可用版本:
yum --showduplicates list nginx如果仓库里仍然保留旧版本,可以尝试降级:
sudo yum downgrade nginx或者指定版本:
sudo yum downgrade nginx-版本号但这里要注意边界。
降级不是任何时候都能成功。
它取决于仓库是否还提供旧版本,以及相关依赖是否也能匹配。
生产环境里,服务版本回退最好配合配置备份、数据备份和灰度验证。
不要把 yum downgrade 当成万能撤销按钮。
七、yum update 和 yum upgrade 有什么区别
在 yum 里,update 和 upgrade 很接近。
通常可以这样理解:
yum update用于更新已安装的软件包。
yum upgrade大体相当于:
yum update --obsoletes它会额外处理被新包替代的旧包。
但不要简单理解成“upgrade 一定会删除旧内核”。
RHEL 系系统对内核通常有特殊的 installonly 机制,会保留多个内核版本,具体保留数量还受 installonly_limit 等配置影响。
真正需要新手记住的是:
生产环境不要随手执行全量
yum update -y。
因为它可能一次性升级大量软件包。
更稳的方式是先看会升级什么:
yum check-update如果只想更新某个包,可以指定包名:
sudo yum update nginx对生产服务器来说,升级前最好先在测试环境验证,再安排维护窗口。
八、yum 缓存可以清理,但别把它当万能修复
yum 缓存通常位于:
/var/cache/yum/清理缓存可以用:
sudo yum clean all重建缓存:
sudo yum makecache换源后执行这两步很常见。
但如果问题是系统版本停止维护、repo 地址写错、网络不通、仓库没有目标包,清缓存并不能从根上解决问题。
所以缓存问题要排查,但不要把所有 yum 报错都归结为缓存。
九、从 yum 到 dnf,变的是工具,不变的是思路
现在很多新系统默认使用 dnf。
你会看到:
dnf install nginxdnf remove nginxdnf search nginx命令和 yum 很像。
dnf 改进了 yum 的一些实现问题,比如依赖解析、性能和插件机制,但它背后的管理思路仍然类似:
读取仓库配置 下载仓库元数据 解析依赖关系 安装 RPM 包 维护本地软件包数据库
所以学 yum 的价值,不只是为了会用 CentOS 7。
更重要的是理解 Linux 软件管理的通用思维。
当你以后接触 dnf、apt、zypper,也会发现它们名字不同,但都在解决同一类问题:让软件安装、升级、卸载变得可追踪、可维护、可自动化。
十、全文总结
yum 镜像源这件事,表面上是在解决下载速度。
但往深一层看,它其实关系到软件包来源、依赖解析、版本兼容和系统安全。
你真正需要掌握的不是某一条换源命令,而是这套判断逻辑:
我是什么系统版本?启用了哪些仓库?包是否存在于这些仓库?镜像源是否可访问?缓存是否需要重建?软件包来源是否可信?生产环境是否有回滚方案?如果能按这个顺序排查,yum 就不再是一堆记不住的命令,而是一套清晰的软件管理方法。
学 Linux,不要只背命令。
命令会变,发行版会变,工具也会从 yum 变成 dnf。
但只要你理解了“软件源、依赖、元数据、版本、签名、回滚”这几个关键词,以后遇到安装包问题,就不会慌。

文章末尾互动提问
你第一次遇到 yum 报错,是下载慢、找不到包、依赖冲突,还是换源后更乱了?
可以把具体报错整理出来,下一篇我们可以专门拆解 yum 常见报错应该怎么一步步定位。

END



夜雨聆风