在 Linux 中使用 YUM 查询和更新软件包

红帽企业 LinuxBeginner
立即练习

介绍

在本实验中,你将学习使用 YUM 软件包管理器在基于 RHEL 的 Linux 系统上管理软件包的基本技能。首先,你将使用 yum listyum deplist 命令检查已安装软件包的详细信息及其依赖关系。接着,你将通过 yum repolist 探索系统配置的软件仓库,了解软件的来源及可用资源。

在掌握这些基础技能后,你将重点转向系统维护与更新。你将学习如何使用 yum check-update 来识别有新版本可用的软件包。最后,你将练习应用这些更新,并了解更新单个特定软件包与执行全系统更新之间的区别,从而保持环境的安全与最新。

使用 'yum list' 和 'yum deplist' 检查已安装的软件包

在本步骤中,你将学习如何使用 yum(CentOS 及其他基于 RHEL 的 Linux 发行版的默认软件包管理器)来检查已安装的软件包。我们将从检查 bash 软件包开始,它提供了你当前可能正在使用的 shell 环境。这些命令有助于你了解系统上安装了什么,以及软件包正常运行所依赖的其他组件。

首先,让我们使用 yum list 命令检查特定软件包的状态。该命令可以告诉你某个软件包是否已安装以及系统上安装的版本。

为了确保实验验证的可靠性,请在检查时将命令输出保存到 /home/labex/project 中。要查看 bash 软件包的详细信息,请在终端中执行以下命令:

sudo yum list bash | tee /home/labex/project/bash-package.txt

你将看到类似以下的输出,确认 bash 已安装。仓库列中的 @ 符号(例如 @anaconda@System)表示该软件包已安装。

Installed Packages
bash.x86_64    <version>    @anaconda

接下来,让我们探讨依赖关系的概念。大多数软件包并非独立存在;它们依赖于其他软件包(如库或工具)才能正常工作。这些必需的软件包称为依赖项。yum deplist 命令允许你查看给定软件包的完整依赖列表。

要查看 bash 软件包所依赖的所有软件包,请运行以下命令:

sudo yum deplist bash | tee /home/labex/project/bash-deplist.txt

输出将列出每个依赖项以及提供该依赖项的软件包。这对于理解 yum 如何解析和管理软件安装至关重要。

package: bash.x86_64 <version>
  dependency: /bin/sh
   provider: bash.x86_64 <version>
  dependency: chkconfig
   provider: chkconfig.x86_64 <version>
  dependency: coreutils
   provider: coreutils.x86_64 <version>
  dependency: libc.so.6(GLIBC_2.15)(64bit)
   provider: glibc.x86_64 <version>
... (output truncated) ...

通过使用 yum listyum deplist,你可以清楚地了解系统上安装的软件包及其相互关系。

使用 'yum repolist' 浏览软件仓库和可用软件包

在本步骤中,你将学习如何浏览 yum 用于查找和安装软件包的软件源(即仓库)。你还将学习如何搜索系统上可供安装的新软件包。

软件包仓库是一个集中存储软件包的地方。当你要求 yum 安装某个软件包时,它会连接到已配置的仓库,下载必要的文件,并将其安装到你的系统上。

要查看系统当前启用的仓库列表,可以使用 yum repolist 命令。这对于验证哪些软件源处于活动状态非常有用。

在终端中执行以下命令,并保存输出以供后续查看:

sudo yum repolist | tee /home/labex/project/yum-repolist.txt

输出将显示仓库 ID、名称及其包含的软件包数量。它看起来像这样:

repo id                                                                                                                          repo name
rhui-rhel-9-for-x86_64-appstream-rhui-rpms                                                                                       Red Hat Enterprise Linux 9 for x86_64 - AppStream from RHUI (RPMs)
rhui-rhel-9-for-x86_64-baseos-rhui-rpms                                                                                          Red Hat Enterprise Linux 9 for x86_64 - BaseOS from RHUI (RPMs)

既然你知道了 yum 从哪里查找软件包,让我们看看有哪些软件包可供安装。yum list available 命令会显示所有已启用仓库中尚未安装在系统上的软件包。

直接运行 yum list available 会产生一个非常长的列表。搜索特定内容会更实用。让我们搜索与 Linux 内核相关的可用软件包。你可以使用通配符 (*) 来匹配多个软件包名称。

执行此命令以列出所有以 kernel 开头的可用软件包:

sudo yum list available 'kernel*' | tee /home/labex/project/yum-kernel-available.txt

kernel* 周围的单引号非常重要,可以防止 shell 自身尝试扩展通配符。输出将显示所有与内核相关的可用软件包列表、它们的版本以及所属的仓库。

Available Packages
kernel-devel.x86_64      <version>      updates
kernel-doc.noarch        <version>      updates
kernel-headers.x86_64    <version>      updates
... (output truncated) ...

这些命令对于管理系统软件至关重要,让你能够查看软件源并发现可安装的新工具。

使用 'yum check-update' 检查可用更新

在本步骤中,你将学习如何检查系统已安装软件包的可用更新。保持系统更新是安全和稳定的关键任务,因为更新通常包含漏洞补丁、错误修复和新功能。

yum check-update 命令提供了一种安全的方式来查看哪些已安装的软件包在仓库中有新版本。请注意,此命令仅 列出 可用更新,而不会下载或安装它们。这使你能够在应用更改之前进行审查。

要检查系统上的所有可用更新,请在终端中执行以下命令。其中的 || true 部分是为了防止 yum check-update 返回状态码 100(这是 yum 报告有可用更新的方式)时导致 shell 停止执行。

sudo yum check-update | tee /home/labex/project/yum-check-update.txt || true

yum 现在将连接到所有已启用的仓库,刷新其本地软件包信息缓存,并将已安装软件包的版本与最新的可用版本进行比较。

如果有可用更新,你将看到一个列表,类似于以下示例。每一行显示软件包名称、新版本以及将从中更新的仓库。

bind-libs.x86_64                 <version>      updates
bind-license.noarch              <version>      updates
curl.x86_64                      <version>      updates
glibc.x86_64                     <version>      updates
glibc-common.x86_64              <version>      updates
... (output truncated) ...

如果你的系统已完全更新,该命令将完成且不列出任何软件包。此命令是日常系统维护的重要组成部分,在你进行后续步骤的实际更新过程之前,它能为你提供系统状态的清晰概览。

使用 'yum update ' 应用单个软件包更新

在本步骤中,你将应用特定软件包的更新。在上一步中,你使用了 yum check-update 查看所有有可用更新的软件包列表。虽然一次性更新整个系统很常见,但在某些情况下,你可能只想更新单个软件包。这能让你更好地控制系统变更。

让我们从之前看到的列表中选择一个软件包进行更新。我们将以 curl 为例,它是一个常用的数据传输工具。如果 curl 不在你的可用更新列表中,你可以从列表中选择另一个软件包。

在更新软件包之前,我们需要将 curl 软件包降级到一个有可用更新的版本。

sudo yum downgrade -y curl

要仅更新 curl 软件包,请运行以下命令:

sudo yum update curl | tee /home/labex/project/curl-update.txt

yum 现在将解析 curl 的依赖关系,确定需要更新的内容,并向你展示事务摘要。该摘要显示了哪些软件包将被更新以及总下载大小。

Resolving Dependencies
--> Running transaction check
---> Package curl.x86_64 0:<old_version> will be updated
---> Package curl.x86_64 0:<new_version> will be an update
--> Processing Dependency: libcurl = <new_version> for package: curl-<new_version>.x86_64
--> Running transaction check
---> Package libcurl.x86_64 0:<old_version> will be updated
---> Package libcurl.x86_64 0:<new_version> will be an update
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package      Arch         Version              Repository                 Size
================================================================================
Updating:
 curl         x86_64       <new_version>        updates                    <size>
Updating for dependencies:
 libcurl      x86_64       <new_version>        updates                    <size>

Transaction Summary
================================================================================
Upgrade  1 Package (+1 Dependent package)

Total download size: <total_size>
Is this ok [y/d/N]:

检查更改。如果你准备好继续,请输入 y 并按回车键。yum 随后将下载并安装更新。

过程完成后,你将看到 "Complete!" 消息,确认更新成功。

...
Running transaction
  Updating   : libcurl-<new_version>.x86_64                                 1/4
  Updating   : curl-<new_version>.x86_64                                    2/4
  Cleanup    : curl-<old_version>.x86_64                                    3/4
  Cleanup    : libcurl-<old_version>.x86_64                                 4/4
  Verifying  : curl-<new_version>.x86_64                                    1/4
  ...

Updated:
  curl.x86_64 <new_version>

Dependency Updated:
  libcurl.x86_64 <new_version>

Complete!

现在你已成功更新了单个软件包及其依赖项。这种针对性的方法非常适合在不进行全系统升级的情况下应用特定的安全补丁或功能更新。

使用 'yum update' 执行全系统更新

在本步骤中,你将执行最常见且最重要的软件包管理任务:全系统更新。虽然更新单个软件包很有用,但定期更新系统上的所有软件对于维护安全性、稳定性以及获取最新功能和错误修复至关重要。

如果不指定软件包名称,yum update 命令将检查所有已安装的软件包与已启用仓库中的版本,并更新所有发现有新版本的软件包。

警告:此过程可能会下载大量数据,并且根据可用更新的数量和你的网络连接速度,可能需要相当长的时间才能完成。

要开始全系统更新,请在终端中执行以下命令:

sudo yum update | tee /home/labex/project/full-system-update.txt

与更新单个软件包类似,yum 将首先解析所有依赖关系,然后向你展示事务摘要。这个列表可能比之前长得多,因为它包含了所有需要更新的软件包。

Resolving Dependencies
--> Running transaction check
... (many packages listed) ...

Dependencies Resolved

================================================================================
 Package               Arch         Version              Repository        Size
================================================================================
Updating:
 bind-libs             x86_64       <version>            updates           <size>
 bind-license          noarch       <version>            updates           <size>
 glibc                 x86_64       <version>            updates           <size>
 glibc-common          x86_64       <version>            updates           <size>
 ... (many more packages) ...

Transaction Summary
================================================================================
Upgrade  <X> Packages

Total download size: <total_size>
Is this ok [y/d/N]:

仔细检查要更新的软件包列表。当你准备好继续时,请输入 n 以跳过更新,因为在此练习环境中更新所有软件包会花费太长时间。

你现在已经查看了全系统更新事务,而没有实际应用它。在实际的维护窗口中,你只需重新运行 sudo yum update 并在准备好安装所有可用更新时输入 y 即可。

总结

在本实验中,你学习了使用 YUM 软件包管理器在基于 RHEL 的 Linux 系统上管理软件包的基础知识。你首先使用 yum list 检查已安装软件包的状态和版本,然后使用 yum deplist 查看其依赖关系。你还通过 yum repolist 命令列出所有活动仓库,探索了已配置的软件源。

实验随后引导你完成了软件包更新过程。你学习了如何使用 yum check-update 在不安装的情况下检查整个系统的可用更新。你练习了使用 yum update <package> 应用特定软件包的更新,并最后通过 yum update 命令查看了全系统更新事务,以便在批准之前了解完整系统升级的操作内容。