在CentOS系统中,YUM(Yellowdog Updater, Modified)是核心的软件包管理工具,它极大地简化了软件的安装、更新和卸载过程,定期使用YUM升级系统软件不仅是获取新功能的方式,更是确保系统安全、稳定和性能优化的关键实践,本文将详细介绍如何利用YUM在CentOS上进行软件升级,涵盖从基础操作到高级技巧的完整流程。

理解YUM与软件仓库
在开始操作之前,理解YUM的工作原理至关重要,YUM本身并不包含软件文件,它是一个前端工具,负责从配置好的“软件仓库”中下载软件包及其依赖关系,并自动处理安装过程,这些仓库可以是官方的CentOS源,也可以是第三方提供的源,如EPEL(Extra Packages for Enterprise Linux),YUM会读取位于/etc/yum.repos.d/目录下的配置文件,以知晓从何处获取软件。
升级前的准备工作
执行系统升级是一项敏感操作,充分的准备可以避免不必要的麻烦。
- 备份数据:这是最重要的一步,在进行任何大规模升级之前,务必备份所有重要的数据和配置文件,虽然YUM非常可靠,但意外情况(如断电、磁盘空间不足)仍可能导致系统损坏。
- 检查当前系统版本:了解你正在运行的CentOS版本有助于判断更新的范围,可以使用以下命令查看:
cat /etc/centos-release
- 清理YUM缓存:随着时间的推移,YUM缓存会占用大量磁盘空间,在升级前清理缓存,可以确保下载到最新的软件包元数据。
sudo yum clean all
检查与执行升级
准备工作完成后,就可以开始实际的升级流程了。
检查可用更新
在直接升级之前,最好先查看一下有哪些软件包可供更新,这能让你对即将发生的变化有一个预期。
sudo yum check-update
执行此命令后,YUM会列出所有可以升级的软件包列表,如果没有任何输出,则表示系统中的所有软件包都已是最新的版本,输出结果通常包含软件包名称、版本和来源仓库。
执行升级命令
YUM提供了两个主要的升级命令:yum update 和 yum upgrade,它们在功能上略有不同。
| 命令 | 功能描述 | 推荐场景 |
|---|---|---|
yum update |
升级所有已安装的软件包,但不会删除因版本更新而被废弃的旧软件包。 | 日常维护,安全更新,保守升级。 |
yum upgrade |
升级所有已安装的软件包,同时会删除系统中原有的、但新版本已不再提供的过时软件包。 | 大版本更新,或希望系统保持“干净”,移除冗余组件。 |
对于大多数日常维护场景,推荐使用 yum update,因为它更加保守和安全。
升级单个软件包:
如果你只想升级特定的软件,nginx,可以指定包名:
sudo yum update nginx
升级整个系统: 要升级系统中所有可用的软件包,执行:

sudo yum update
在执行过程中,YUM会计算依赖关系,并显示一个将要下载和安装的软件包列表,以及总体下载大小,它会询问你是否确认:
Is this ok [y/d/N]:
- 输入
y并回车,确认下载并安装。 - 输入
d并回车,仅下载软件包到缓存,不安装。 - 输入
N并回车,取消本次操作。
高级技巧与最佳实践
掌握一些高级技巧,可以让你更精细地控制系统的更新过程。
仅安装安全更新
在生产环境中,有时我们只希望应用关键的安全补丁,而不引入其他可能影响稳定性的功能性更新,这需要安装yum-plugin-security插件(通常已预装)。
sudo yum install yum-plugin-security
安装后,可以使用以下命令检查并仅安装安全更新:
sudo yum update --security
排除特定软件包
在某些情况下,你可能不希望某个特定的软件包被自动升级,例如一个经过特殊编译的内核或一个定制化的应用,可以通过编辑YUM配置文件来实现。
编辑 /etc/yum.conf 文件,在 [main] 部分添加 exclude 指令,要排除所有以 kernel 开头的软件包:
[main] exclude=kernel*
保存后,下次执行 yum update 时,所有匹配 kernel* 的软件包都将被忽略。
查看历史与回滚
YUM提供了一个强大的历史功能,允许你查看、撤销或重做过去的软件事务,这对于排查升级后出现的问题非常有用。
查看历史记录:

yum history list
这个命令会列出所有已执行的事务ID、操作、日期等。
撤销某次操作: 假设某次升级(事务ID为15)导致了系统问题,你可以使用以下命令将其撤销:
sudo yum history undo 15
这会将系统恢复到执行该事务之前的状态。
从YUM到DNF的演进
值得注意的是,从CentOS 8开始,YUM已被其下一代版本DNF(Dandified YUM)所取代,DNF在性能、依赖解析能力和内存管理上都有显著提升,好消息是,DNF的命令行语法与YUM高度兼容,本文中提到的绝大部分命令(如 dnf update, dnf check-update, dnf history)在DNF中同样适用,只是将yum替换为dnf即可,掌握YUM的使用方法对于向新版本CentOS Stream或其他基于RPM的发行版(如Fedora、RHEL 8/9)迁移也大有裨益。
相关问答 (FAQs)
问题1:执行 yum update 后,我需要重启系统吗?
解答: 这取决于更新了哪些内容,如果更新的是用户空间的应用程序(如Nginx、MySQL、PHP等),通常不需要重启,这些服务可以通过 systemctl restart [service_name] 来重启以加载新版本,如果更新了核心组件,特别是Linux内核、glibc(GNU C库)或systemd这类系统底层基础库,强烈建议重启系统,这是因为这些核心组件的旧版本文件可能仍在内存中被使用,只有重启才能确保所有进程都加载了新的、稳定的版本,你可以通过检查已安装的内核版本 (rpm -q kernel) 来判断内核是否被更新。
问题2:如果在升级过程中网络中断或系统意外关机,该怎么办?
解答: YUM具有良好的断点续传和事务恢复机制,当系统恢复后,首先尝试重新运行相同的升级命令(sudo yum update),YUM会检查事务状态,如果发现上次操作未完成,它会自动尝试清理并继续,如果常规的 yum update 命令报告错误或无法进行,可以尝试清理YUM的锁和数据库:
sudo rm -f /var/run/yum.pid sudo yum clean all
之后再次尝试更新,如果问题依旧存在,可以使用 yum history 查看是否有未完成的事务,并使用 yum history redo [transaction_id] 来重试,在极端情况下,如果RPM数据库损坏,可能需要重建数据库(rpm --rebuilddb),但这属于高级排错操作,最好的预防措施始终是在升级前确保网络稳定和电源供应。