Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

9.2. 使用软件包

yum 允许您对软件包执行一整套操作,包括搜索软件包、查看有关软件包的信息、安装和删除软件包。

9.2.1. 搜索软件包

您可以使用以下命令搜索所有 RPM 软件包名称、描述和摘要:

yum search term…

使用您要搜索的软件包名称替换 term

例 9.4. 搜索与特定字符串匹配的软件包

要列出与 "vim"、"gvim" 或 "emacs" 匹配的所有软件包,请输入:

~]$ yum search vim gvim emacs
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
============================= N/S matched: vim ==============================
vim-X11.x86_64 : The VIM version of the vi editor for the X Window System
vim-common.x86_64 : The common files needed by any version of the VIM editor
[output truncated]

============================ N/S matched: emacs =============================
emacs.x86_64 : GNU Emacs text editor
emacs-auctex.noarch : Enhanced TeX modes for Emacs
[output truncated]

 Name and summary matches mostly, use "search all" for everything.
Warning: No matches found for: gvim

yum search 命令可用于搜索您不知道名称但了解相关术语的软件包。请注意,默认情况下,yum search 会在 包名称和摘要中返回匹配项,这样可加快搜索速度。使用 yum search all 命令进行更详细但较慢的搜索。

过滤结果

所有 yum 的 list 命令都允许您通过附加一个或多个 glob 表达式作为参数来过滤结果。glob 表达式是包含一个或多个通配符字符 * (扩展以匹配任何字符子集)和 ? (扩展以匹配任何单个字符)的普通字符字符串。

当将 glob 表达式作为参数传递给 yum 命令时,请小心转义 glob 表达式,否则 Bash shell 会将这些表达式解释为 路径名扩展,并可能 将当前目录中与全局表达式匹配的所有文件传递给 yum。要确定将 glob 表达式传递给 yum,请使用以下方法之一:

  • 在通配符前面使用反斜杠字符转义
  • 双引号或单引号整个 glob 表达式。

下一节中的示例演示了这两种方法的用法。

9.2.2. 列出软件包

要列出所有安装和可用软件包的信息,在 shell 提示符下键入以下内容:

yum list all

要列出与插入 glob 表达式匹配的已安装和可用软件包,请使用以下命令:

yum list glob_expression…

例 9.5. 列出与 ABRT 相关的软件包

带有各种 ABRT 附加组件和插件的软件包以"abrt-addon-"或"abrt-plugin-"开头。要列出这些软件包,请在 shell 提示符后键入以下命令:请注意如何使用反斜杠字符转义通配符字符:

~]$ yum list abrt-addon\* abrt-plugin\*
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Installed Packages
abrt-addon-ccpp.x86_64          2.1.11-35.el7       @rhel-7-server-rpms
abrt-addon-kerneloops.x86_64       2.1.11-35.el7       @rhel-7-server-rpms
abrt-addon-pstoreoops.x86_64       2.1.11-35.el7       @rhel-7-server-rpms
abrt-addon-python.x86_64         2.1.11-35.el7       @rhel-7-server-rpms
abrt-addon-vmcore.x86_64         2.1.11-35.el7       @rhel-7-server-rpms
abrt-addon-xorg.x86_64          2.1.11-35.el7       @rhel-7-server-rpms

要列出系统上安装的所有软件包,请使用 已安装的 关键字。输出中最右侧的列列出了从中检索软件包的存储库。

yum list installed glob_expression…

例 9.6. 列出 krb 软件包的所有已安装版本

以下示例演示了如何列出所有以"krb"开头的软件包,后跟一个字符和连字符。这在您要列出特定组件的所有版本时很有用,因为它们按数字区分。整个 glob 表达式都用引号括起,以确保正确处理。

~]$ yum list installed "krb?-*"
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Installed Packages
krb5-libs.x86_64         1.13.2-10.el7          @rhel-7-server-rpms

要列出所有启用的软件仓库中可用于安装的软件包,请使用以下命令:

yum list available glob_expression…

例 9.7. 列出可用的 gstreamer 插件

例如,要列出包含"gstreamer"和"plugin"的名称的所有可用软件包,请运行以下命令:

~]$ yum list available gstreamer*plugin\*
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Available Packages
gstreamer-plugins-bad-free.i686       0.10.23-20.el7     rhel-7-server-rpms
gstreamer-plugins-base.i686         0.10.36-10.el7     rhel-7-server-rpms
gstreamer-plugins-good.i686         0.10.31-11.el7     rhel-7-server-rpms
gstreamer1-plugins-bad-free.i686      1.4.5-3.el7      rhel-7-server-rpms
gstreamer1-plugins-base.i686        1.4.5-2.el7      rhel-7-server-rpms
gstreamer1-plugins-base-devel.i686     1.4.5-2.el7      rhel-7-server-rpms
gstreamer1-plugins-base-devel.x86_64    1.4.5-2.el7      rhel-7-server-rpms
gstreamer1-plugins-good.i686        1.4.5-2.el7      rhel-7-server-rpms

列出存储库

要列出系统中每个启用的存储库的存储库 ID、名称和软件包数量,请使用以下命令:

yum repolist

要列出这些存储库的更多信息,请添加 -v 选项。启用此选项后,将显示每个列出的存储库的信息,包括文件名、总体大小、最后一次更新的日期和基本 URL。另外,您可以使用生成相同输出的 repoinfo 命令。

yum repolist -v
yum repoinfo

若要列出已启用和禁用的存储库,可使用以下命令:在输出列表中添加一个状态列,以显示启用了哪些存储库。

yum repolist all

通过将 disabled 作为第一个参数传递,您可以将命令输出减少至禁用的存储库。如需进一步规格,您可以将存储库的 ID 或名称或相关的 glob_expressions 作为参数传递。请注意,如果存储库 ID 或名称与插入的参数完全匹配,则即使未传递已启用或禁用 的过滤器,也会列出此存储库。

9.2.3. 显示软件包信息

要显示一个或多个软件包的信息,请使用以下命令(glob 表达式在这里也有效):

yum info package_name…

使用软件包名称替换 package_name

例 9.8. 显示 abrt 软件包中的信息

要显示 abrt 软件包的信息,请输入:

~]$ yum info abrt
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Installed Packages
Name    : abrt
Arch    : x86_64
Version   : 2.1.11
Release   : 35.el7
Size    : 2.3 M
Repo    : installed
From repo  : rhel-7-server-rpms
Summary   : Automatic bug detection and reporting tool
URL     : https://fedorahosted.org/abrt/
License   : GPLv2+
Description : abrt is a tool to help users to detect defects in applications and
      : to create a bug report with all information needed by maintainer to fix
      : it. It uses plugin system to extend its functionality.

yum info package_name 命令类似于 rpm -q --info package_name 命令,但提供了从 安装 RPM 软件包的 yum 存储库的名称(查找输出中的 From repo: 行)。

使用 yumdb

您还可以使用以下命令查询 yum 数据库以获取有关软件包的替代和有用信息:

yumdb info package_name

此命令提供关于软件包的其他信息,包括软件包的校验和(以及用于生成软件包的算法,如 SHA-256)、命令行上为安装软件包所提供的命令(如果有),以及将软件包安装到系统上的原因( 用户 指明其由用户安装,而 dep 表示它是作为依赖项引入的)。

例 9.9. 查询 yumdb 以了解有关 yum 软件包的信息

要显示 yum 软件包的附加信息,请输入:

~]$ yumdb info yum
Loaded plugins: langpacks, product-id
yum-3.4.3-132.el7.noarch
   changed_by = 1000
   checksum_data = a9d0510e2ff0d04d04476c693c0313a11379053928efd29561f9a837b3d9eb02
   checksum_type = sha256
   command_line = upgrade
   from_repo = rhel-7-server-rpms
   from_repo_revision = 1449144806
   from_repo_timestamp = 1449144805
   installed_by = 4294967295
   origin_url = https://cdn.redhat.com/content/dist/rhel/server/7/7Server/x86_64/os/Packages/yum-3.4.3-132.el7.noarch.rpm
   reason = user
   releasever = 7Server
   var_uuid = 147a7d49-b60a-429f-8d8f-3edb6ce6f4a1

有关 yumdb 命令的更多信息,请参阅 yumdb(8)手册页。

9.2.4. 安装软件包

要安装单个软件包及其所有未安装的依赖项,以 root 用户身份输入以下命令:

yum install package_name

您还可以通过将多个软件包作为参数附加来同时安装多个软件包。要做到这一点,以 root 用户身份输入:

yum install package_name package_name…

如果要在 multilib 系统(如 AMD64 或 Intel 64 机器)上安装软件包,您可以通过在软件包名称中添加.arch 来指定软件包的构架(只要启用的软件仓库中可用):

yum install package_name.arch

例 9.10. 在 multilib 系统上安装软件包

要为 i686 架构安装 sqlite 软件包,请输入:

~]# yum install sqlite.i686

您可以使用 glob 表达式快速安装多个名称相似的软件包。以 root 用户身份执行:

yum install glob_expression…

例 9.11. 安装所有udacious插件

如果要安装多个名称相似的软件包时,全局表达式很有用。要安装所有 audacious 插件,请使用以下格式的命令:

~]# yum install audacious-plugins-\*

除了软件包名称和 glob 表达式外,您还可以为 yum install 提供文件名。如果您知道要安装的二进制文件的名称,但不知道其软件包名称,您可以为 yum install 提供路径名称。以 root 用户身份键入:

yum install /usr/sbin/named

yum 随后搜索其包列表,找到提供 /usr/sbin/named 的软件包(如果有),并提示您是否安装它。

如上例中所示,yum install 命令不需要严格定义的参数。它可以处理各种软件包名称和 glob 表达式格式,从而方便用户安装。另一方面,需要花些时间才能正确 解析 输入,特别是您指定了大量软件包时。要优化软件包搜索,您可以使用以下命令来显式定义如何解析参数:

yum install-n name
yum install-na name.architecture
yum install-nevra name-epoch:version-release.architecture

使用 install-n 时,yum 会将 name 解释为软件包的确切名称。install-na 命令告知 yum,后续参数包含用点字符划分的软件包名称和架构。使用 install-nevra 时,yum 期望格式为 name-epoch:version-release.architecture 的参数。同样,搜索要删除的软件包时,您可以使用 yum remove-n、yum remove-na 和 yum remove-nevra

注意

如果您知道要安装包含 命名 二进制的软件包,但您不知道在哪个 bin/ or sbin/ 目录中安装了该文件,请使用带有 glob 表达式的 yum 提供 命令:

~]# yum provides "*bin/named"
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-
       : manager
32:bind-9.9.4-14.el7.x86_64 : The Berkeley Internet Name Domain (BIND) DNS
              : (Domain Name System) server
Repo    : rhel-7-server-rpms
Matched from:
Filename  : /usr/sbin/named

yum 提供"*/file_name" 是查找包含 file_name 的软件包的有用方法。

例 9.12. 安装过程

以下示例提供了使用 yum 的安装概述。要下载并安装最新版本的 httpd 软件包,以 root 用户身份执行:

~]# yum install httpd
Loaded plugins: langpacks, product-id, subscription-manager
Resolving Dependencies
--> Running transaction check
---> Package httpd.x86_64 0:2.4.6-12.el7 will be updated
---> Package httpd.x86_64 0:2.4.6-13.el7 will be an update
--> Processing Dependency: 2.4.6-13.el7 for package: httpd-2.4.6-13.el7.x86_64
--> Running transaction check
---> Package httpd-tools.x86_64 0:2.4.6-12.el7 will be updated
---> Package httpd-tools.x86_64 0:2.4.6-13.el7 will be an update
--> Finished Dependency Resolution

Dependencies Resolved

执行上述命令后,yum 会加载必要的插件并运行事务检查。在本例中,httpd 已经安装。由于安装的软件包比最新可用版本旧,因此将会进行更新。这同样适用于 httpd 依赖的 httpd -tools 软件包。然后会显示一个事务概述:

================================================================================
 Package    Arch   Version         Repository        Size
================================================================================
Updating:
 httpd     x86_64  2.4.6-13.el7      rhel-x86_64-server-7  1.2 M
Updating for dependencies:
 httpd-tools  x86_64  2.4.6-13.el7      rhel-x86_64-server-7   77 k

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

Total size: 1.2 M
Is this ok [y/d/N]:

在这一步中,yum 会提示您确认安装。除了 y (yes)和 N (否)选项外,您可以选择 d (仅下载)下载软件包,但不能直接安装它们。如果您选择 y,安装会继续包含以下信息,直到成功完成为止。

Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
 Updating  : httpd-tools-2.4.6-13.el7.x86_64               1/4
 Updating  : httpd-2.4.6-13.el7.x86_64                  2/4
 Cleanup  : httpd-2.4.6-12.el7.x86_64                  3/4
 Cleanup  : httpd-tools-2.4.6-12.el7.x86_64               4/4
 Verifying : httpd-2.4.6-13.el7.x86_64                  1/4
 Verifying : httpd-tools-2.4.6-13.el7.x86_64               2/4
 Verifying : httpd-tools-2.4.6-12.el7.x86_64               3/4
 Verifying : httpd-2.4.6-12.el7.x86_64                  4/4

Updated:
 httpd.x86_64 0:2.4.6-13.el7

Dependency Updated:
 httpd-tools.x86_64 0:2.4.6-13.el7

Complete!

要从系统中的本地目录安装之前下载的软件包,请使用以下命令:

yum localinstall path

使用您要安装的软件包的路径替换 path

9.2.5. 下载软件包

例 9.12 “安装过程” 所示,在某个安装过程点,系统会提示您使用以下信息确认安装:

...
Total size: 1.2 M
Is this ok [y/d/N]:
...

使用 d 选项时,yum 将下载软件包,而不立即安装它们。您稍后可以使用 yum localinstall 命令离线安装这些软件包,也可以与其他设备共享这些软件包。下载的软件包保存在缓存目录的一个子目录中,默认为 /var/cache/yum/$basearch/$releasever/packages/。下载操作以后台模式进行,以便您可以并行使用 yum 进行其他操作。

9.2.6. 删除软件包

与软件包安装类似,yum 可让您卸载它们。要卸载特定软件包以及依赖它的软件包,以 root 用户身份运行以下命令:

yum remove package_name…

与安装多个软件包时一样,您可以通过在 命令中添加更多软件包名称来一次性删除多个软件包。

例 9.13. 删除多个软件包

要删除 totem,在 shell 提示符后输入以下内容:

~]# yum remove totem

安装 类似,删除 可以使用这些参数:

  • 软件包名称
  • glob 表达式
  • 文件列表
  • 软件包提供
警告

yum 无法删除软件包,除非同时删除依赖于它的软件包。不建议这种类型的操作(只能由 RPM 执行),并可能会使您的系统处于非正常运行状态或导致应用程序无法正常工作或崩溃。