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

Red Hat Enterprise LinuxBeginner
立即练习

介绍

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

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

这是一个引导实验,提供了逐步指导以帮助你学习和练习。请仔细遵循说明完成每个步骤并获得实践经验。历史数据表明,这是一个初学者级别的实验,完成率为 98%。它获得了学习者 99% 的好评率。

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

在这一步中,你将学习如何使用 yum 检查已安装的软件包。yum 是 CentOS 及其他基于 RHEL 的 Linux 发行版的默认软件包管理器。我们将从检查 bash 软件包开始,它提供了你目前可能正在使用的 Shell 环境。这些命令可以帮助你了解系统上安装了什么,以及一个软件包运行需要依赖哪些其他组件。

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

要检查 bash 软件包的详细信息,请在终端执行以下命令:

sudo yum list bash

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

Installed Packages
bash.x86_64    <version>    @anaconda

接下来,让我们探讨依赖关系(Dependency)的概念。大多数软件包并不是独立的,它们需要依赖其他软件包(如库文件或工具)才能正常工作。这些必需的软件包被称为依赖项。使用 yum deplist 命令可以查看指定软件包的完整依赖列表。

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

sudo yum deplist bash

输出将列出每个依赖项以及提供该依赖项的软件包。这对于理解 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' 探索软件仓库和可用软件包

在这一步中,你将学习如何探索软件源,即软件仓库(Repository)。yum 使用这些仓库来查找并安装软件包。你还将学习如何搜索可供安装到系统中的新软件包。

软件仓库是存放软件包的集中存储位置。当你要求 yum 安装软件包时,它会联系配置好的仓库,下载必要的文件并将其安装到你的系统中。

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

在终端执行以下命令:

sudo yum repolist

输出将显示仓库 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)相关的可用软件包。你可以使用通配符(*)来匹配多个包名。

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

sudo yum list available 'kernel*'

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 命令提供了一种安全的方式来查看哪些已安装的软件包在仓库中有更新的版本。需要注意的是,此命令仅「列出」可用的更新,并不会下载或安装它们。这让你可以应用更改之前先进行审查。

要检查系统中的所有可用更新,请在终端执行以下命令:

sudo yum check-update

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

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

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

与更新单个软件包类似,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 来跳过更新,因为更新所有软件包会耗费太长时间。

恭喜!你已经了解了如何更新整个系统。这是管理任何 Linux 服务器或工作站的基本技能,能够确保系统保持安全和可靠。

总结

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

随后,本实验引导你完成了软件包更新过程。你学习了如何使用 yum check-update 在不安装的情况下检查整个系统的可用更新。你练习了使用 yum update <package> 对单个软件包应用特定更新,最后通过 yum update 命令执行了全系统更新,应用了所有可用的补丁和软件升级,确保了系统的时效性与安全性。