网站搜索

如何安装和使用“yum-utils”来维护 Yum 并提高其性能


无论 Fedora 开始采用 dnf 作为新的包管理器和默认包管理库,它都不会在其他衍生发行版(例如 Red Hat Enterprise Linux)中永久取代旧的 yum 包管理器(Red Hat Enterprise Linux)。 >RHEL)和 CentOS),直到它被证明像 yum 一样可靠并且更可靠(根据 Fedora 项目 wiki,截至 11 月 15 日, 2015年,dnf仍处于可测试状态)。因此,您的百胜管理技能将在相当长的一段时间内为您带来好处。

因此,在本指南中,我们将向您介绍 yum-utils,这是一个与 yum 集成的实用程序集合,可以通过多种方式扩展其本机功能,从而使其更强大且更易于使用。

在 RHEL/CentOS 中安装 yum-utils

Yum-utils 包含在基本存储库中(默认情况下启用),因此在任何基于 Fedora 的发行版中安装它就像执行以下操作一样简单:

yum update && yum install yum-utils

yum-utils 提供的所有实用程序都会随主包自动安装,我们将在下一节中介绍。

探索 yum-utils 包提供的实用程序

yum-utils 提供的工具在其手册页中列出:

man yum-utils

以下是我们认为您可能感兴趣的 10 个 yum 实用程序:

1. 调试包

debuginfo-install 安装调试 所需的 debuginfo 包(及其依赖项),以防发生崩溃或在开发使用特定包的应用程序时。

为了调试包(或任何其他可执行文件),我们还需要安装 gdb(GNU 调试器)并使用它在调试模式下启动程序。

例如:

gdb $(which postfix)

上面的命令将启动一个gdb shell,我们可以在其中输入要执行的操作。例如,run(如下图所示)将启动程序,而bt(未显示)将显示堆栈跟踪(也称为backtrace ),它将提供导致程序执行中某个点的函数调用列表(使用此信息,开发人员和系统管理员都可以在崩溃时找出问题所在)。

man gdb 中列出了其他可用操作及其预期结果。

2. 查找已安装软件包的存储库

以下命令显示当前安装的软件包 是从哪个存储库安装的:

find-repos-of-install httpd postfix dovecot

如果不带参数运行,find-repos-of-install 将返回当前安装的软件包的完整列表。

3. 删除重复或孤立的包

package-cleanup 管理包清理、重复项、孤立包(从当前配置的存储库以外的源安装的程序)和其他依赖项不一致问题,包括删除旧内核,如以下示例所示:

package-cleanup --orphans
package-cleanup --oldkernels

您不必担心最后一个命令会损坏您的内核。它只会影响不再需要的旧内核包(比当前运行的版本更旧的版本)。

4. 找出包依赖列表

repo-graph 格式返回已配置存储库中所有可用包的完整包依赖项列表。或者,如果与 --repoid= 选项一起使用,repo-graph 可以按存储库返回相同的信息。

例如,让我们查看更新存储库中每个包的依赖关系:

repo-graph --repoid=updates | less

在上面的命令中,我们将 repo-graph 的输出发送到 less 以便于可视化,但您也可以将其重定向到本地文件以供以后检查:

repo-graph --repoid=updates > updates-dependencies.txt

无论哪种情况,我们都可以看到 iputils 软件包依赖于 systemdopenssl-libs

5. 检查未解决的依赖项列表

repoclosure 读取已配置存储库的元数据,检查其中包含的包的依赖关系,并显示每个包的未解决的依赖关系列表:

repoclosure

6. 如何检查目录中最新或最旧的包

repomanage 查询包含 rpm 软件包的目录,并返回目录中最新或最旧的软件包的列表。如果您有一个目录存储不同程序的多个 .rpm 软件包,则此工具会派上用场。

当不带参数执行时,repomanage 返回最新的包。如果使用 --old 标志运行,它将返回最旧的包:

ls -l
cd rpms
ls -l rpms
repomanage rpms

请注意,更改 rpm 包的名称不会影响 repomanage 的工作方式。

7. 查询 Yum 存储库以获取有关包的信息

repoquery 查询 yum 存储库并获取有关软件包的附加信息,无论它们是否已安装(依赖项、软件包中包含的文件等)。

例如,该系统上当前未安装 htop(Linux 进程监控),如下所示:

which htop
rpm -qa | grep htop

现在假设我们想要列出 htop 的依赖项,以及默认安装中包含的文件。为此,请分别执行以下两个命令:

repoquery --requires htop
repoquery --list htop

8. 将所有已安装的 RPM 包转储到 Zip 文件中

yum-debug-dump 允许您将已安装的所有软件包、任何存储库中可用的所有软件包、重要配置和系统信息的完整列表转储到压缩文件中。

如果您想要调试已发生的问题,这会派上用场。为了方便起见,yum-debug-dump 将文件命名为 yum_debug_dump--,这使我们能够跟踪一段时间内的更改。

yum-debug-dump

与任何压缩文本文件一样,我们可以使用 zless 命令查看其内容:

zless yum_debug_dump-mail.linuxnewz.com-2015-11-27_08:34:01.txt.gz

如果您需要恢复 yum-debug-dump 提供的配置信息,可以使用 yum-debug-restore 来执行此操作:

yum-debug-restore yum_debug_dump-mail.linuxnewz.com-2015-11-27_08:34:01.txt.gz

9. 从 Yum 存储库下载源 RPM

yumdownloader 从存储库下载源 RPM 文件,包括它们的依赖项。对于创建可从 Internet 访问受限的其他计算机进行访问的网络存储库很有用。

Yumdownloader 不仅允许您下载二进制 RPM,还允许您下载源代码(如果与 --source 选项一起使用)。

例如,让我们创建一个名为 htop-files 的目录,我们将在其中存储使用 rpm 安装程序所需的 RPM。为此,我们需要将 --resolve 开关与 yumdownloader 一起使用:

mkdir htop-files
cd htop-files
yumdownloader --resolve htop
rpm -Uvh 

10. 将远程 Yum 存储库同步到本地目录

reposyncyumdownloader 密切相关(事实上,它们支持几乎相同的选项),但提供了相当大的优势。它将远程存储库同步到本地目录,而不是下载二进制或源 RPM 文件。

让我们将众所周知的 EPEL 存储库同步到当前工作目录中名为 epel-local 的子目录:

man reposync
mkdir epel-local
reposync --repoid=epel --download_path=epel-local

请注意,此过程将需要相当长的时间,因为它正在下载 8867 软件包:

同步完成后,让我们使用 du 命令检查新创建的 EPEL 存储库镜像所使用的磁盘空间量:

du -sch epel-local/*

现在,您可以决定是否保留此 EPEL 镜像或使用它来安装软件包而不是使用远程镜像。在第一种情况下,请记住您需要相应地修改 /etc/yum.repos.d/epel.repo

11. 修复未完成或中止的 Yum 事务

yum-complete-transactionyum-utils 程序的一部分,它捕获系统上未完成或中止的 yum 事务并尝试完成它们。

例如,当我们通过 yum 包管理器更新 Linux 服务器时,有时会抛出一条警告消息,内容如下:

尚有未完成的交易。您可能会考虑先运行 yum-complete-transaction 来完成它们。

为了修正此类警告消息并解决此类问题,yum-complete-transaction 命令出现来完成未完成的事务,它会在 transaction-all* 中查找那些不完整或中止的 yum 事务 和 transaction-done* 文件可以在 /var/lib/yum 目录中找到。

运行 yum-complete-transaction 命令来完成不完整的 yum 事务:


yum-complete-transaction --cleanup-only

现在,yum 命令将在没有不完整事务警告的情况下运行。


yum update

注意:此提示是由我们的一位老读者先生建议的。托马斯在这里的评论部分。

概括

在本文中,我们介绍了通过 yum-utils 提供的一些最有用的实用程序。有关完整列表,您可以参考手册页 (man yum-utils)。

此外,每个工具都有一个单独的手册页(例如,请参见 man reposync),如果您想了解有关它们的更多信息,这是您应该参考的文档的主要来源。

如果您花点时间查看 yum-utils 的手册页,也许您会发现另一个您希望我们在单独的文章中更深入介绍的工具。如果是这样,或者如果您对本文有疑问、意见或建议,请随时使用下面的评论表给我们留言,让我们知道是哪一个。