在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)
解答: 这取决于更新了哪些内容,如果更新的是用户空间的应用程序(如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
),但这属于高级排错操作,最好的预防措施始终是在升级前确保网络稳定和电源供应。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复