Red Hat Training

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

9.4. 使用事务历史记录

yum history 命令允许用户查看有关 yum 事务时间表、发生日期和时间、受影响的软件包数量、这些事务是否成功还是被中止的信息,以及是否在不同事务之间更改了 RPM 数据库。此外,此命令可用于撤销或恢复某些事务。所有历史记录数据都存储在 /var/lib/yum/history/ 目录中的历史记录 DB 中

9.4.1. 列出事务

root 用户身份显示二十项最新事务的列表,或者在没有额外参数的情况下运行 yum history,或者在 shell 提示符下键入以下内容:

yum history list

要显示所有事务,请添加 all 关键字:

yum history list all

要只显示给定范围内的事务,请使用以下格式的命令:

yum history list start_id..end_id

您也可以仅列出与特定软件包或软件包相关的事务。要做到这一点,使用带有软件包名称或 glob 表达式的命令:

yum history list glob_expression…

例 9.19. 列出五个最旧的事务

yum history 列表中,最新的事务会显示在列表的顶部。要显示历史记录数据库中存储的五个最旧的事务的信息,请输入:

~]# yum history list 1..5
Loaded plugins: langpacks, product-id, subscription-manager
ID   | Login user        | Date and time  | Action(s)   | Altered
-------------------------------------------------------------------------------
   5 | User <user>       | 2013-07-29 15:33 | Install    |  1
   4 | User <user>       | 2013-07-21 15:10 | Install    |  1
   3 | User <user>       | 2013-07-16 15:27 | I, U      |  73
   2 | System <unset>      | 2013-07-16 15:19 | Update     |  1
   1 | System <unset>      | 2013-07-16 14:38 | Install    | 1106
history list

所有形式的 yum history list 命令生成表格输出,每行由以下列组成:

  • id - 标识特定事务的整数值。
  • 登录用户 - 用于启动事务的登录会话的用户名称。此信息通常显示在 Full Name <username> 表单中。对于不是由用户发布的事务(如自动系统更新),改为使用 System <unset>
  • 日期和时间 - 签发交易的日期和时间。
  • action(s) - 事务期间执行的操作列表,如 表 9.1 “Action(s)字段的可能值” 所述。
  • 更改 - 受事务影响的软件包数量,后跟 表 9.2 “Altered 字段的可能值” 所述的附加信息。

表 9.1. Action(s)字段的可能值

操作缩写描述

降级

D

至少一个软件包已降级到较旧版本。

擦除

E

至少已删除一个软件包。

安装

I

至少已安装了一个新软件包。

Obsoleting

O

至少一个软件包被标记为过时。

重新安装

R

至少已重新安装了一个软件包。

Update(更新)

U

至少一个软件包已更新为更新的版本。

表 9.2. Altered 字段的可能值

符号描述

<

在事务完成前,rpm db 数据库在 yum 外部更改。

>

事务完成后,rpm db 数据库 在 yum 外部被更改。

*

事务未能完成。

#

事务成功完成,但 yum 返回一个非零退出代码。

E

事务成功完成,但会显示错误或警告。

P

事务成功完成,但 rpmdb 数据库中已存在问题。

s

事务成功完成,但是使用了 --skip-broken 命令行选项并跳过某些软件包。

要将任何已安装软件包的 rpmdb 或 yumdb 数据库内容与当前使用的 rpmdb 或 yumdb 数据库 同步,请输入以下内容:

yum history sync

要显示有关当前使用历史记录数据库的一些总体统计信息,请使用以下命令:

yum history stats

例 9.20. yum history stats 输出示例

~]# yum history stats
Loaded plugins: langpacks, product-id, subscription-manager
File    : //var/lib/yum/history/history-2012-08-15.sqlite
Size    : 2,766,848
Transactions: 41
Begin time : Wed Aug 15 16:18:25 2012
End time  : Wed Feb 27 14:52:30 2013
Counts   :
 NEVRAC : 2,204
 NEVRA : 2,204
 NA   : 1,759
 NEVR  : 2,204
 rpm DB : 2,204
 yum DB : 2,204
history stats

yum 还允许您显示所有过去事务的摘要。要做到这一点,以 root 用户身份运行以下命令:

yum history summary

要只显示给定范围内的事务,请输入:

yum history summary start_id..end_id

yum history list 命令类似,您可以通过提供软件包名称或 glob 表达式来显示与特定软件包或软件包相关的事务摘要:

yum history summary glob_expression&hellip;

例 9.21. 五个最新事务摘要

~]# yum history summary 1..5
Loaded plugins: langpacks, product-id, subscription-manager
Login user         | Time        | Action(s)    | Altered
-------------------------------------------------------------------------------
Jaromir ... <jhradilek>  | Last day      | Install     |    1
Jaromir ... <jhradilek>  | Last week      | Install     |    1
Jaromir ... <jhradilek>  | Last 2 weeks    | I, U       |    73
System <unset>       | Last 2 weeks    | I, U       |   1107
history summary

所有形式的 yum history summary 命令都会 生成与 yum history list 输出类似的简化表格输出。

如上所示,yum history listyum history summary 都面向事务,尽管它们允许您只显示与给定软件包或软件包相关的事务,但它们缺少重要的详情,如软件包版本。要从软件包的视角列出事务,以 root 用户身份运行以下命令:

yum history package-list glob_expression&hellip;

例 9.22. 跟踪软件包历史记录

例如,要跟踪 subscription-manager 和相关软件包的历史记录,在 shell 提示符后输入以下内容:

~]# yum history package-list subscription-manager\*
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
ID   | Action(s)   | Package
-------------------------------------------------------------------------------
   2 | Updated    | subscription-manager-1.13.22-1.el7.x86_64     EE
   2 | Update     |           1.15.9-15.el7.x86_64     EE
   2 | Obsoleted   | subscription-manager-firstboot-1.13.22-1.el7.x86_64 EE
   2 | Updated    | subscription-manager-gui-1.13.22-1.el7.x86_64   EE
   2 | Update     |             1.15.9-15.el7.x86_64   EE
   2 | Obsoleting   | subscription-manager-initial-setup-addon-1.15.9-15.el7.x86_64 EE
   1 | Install    | subscription-manager-1.13.22-1.el7.x86_64
   1 | Install    | subscription-manager-firstboot-1.13.22-1.el7.x86_64
   1 | Install    | subscription-manager-gui-1.13.22-1.el7.x86_64
history package-list

在本例中,初始系统安装过程中安装了三个软件包:subscription -manager、subscription- manager-firstbootsubscription-manager-gui。在第三个事务中,所有这些软件包已从 1.10.11 更新至 1.10.17 版本。

9.4.2. 检查事务

要以 root 用户身份显示单个事务的摘要,以以下格式使用 yum history summary 命令:

yum history summary id

在这里,id 代表事务的 ID。

要更详细地检查特定的事务或事务,以 root 用户身份运行以下命令:

yum history info id&hellip;

id 参数是可选的,当省略它时,yum 会自动使用最后一个事务。请注意,在指定多个事务时,您还可以使用范围:

yum history info start_id..end_id

例 9.23. yum history info 的输出示例

以下是两个事务的输出示例,每个事务都安装一个新的软件包:

~]# yum history info 4..5
Loaded plugins: langpacks, product-id, search-disabled-repos, subscription-manager
Transaction ID : 4..5
Begin time   : Mon Dec 7 16:51:07 2015
Begin rpmdb  : 1252:d2b62b7b5768e855723954852fd7e55f641fbad9
End time    :      17:18:49 2015 (27 minutes)
End rpmdb   : 1253:cf8449dc4c53fc0cbc0a4c48e496a6c50f3d43c5
User      : Maxim Svistunov <msvistun>
Return-Code  : Success
Command Line  : install tigervnc-server.x86_64
Command Line  : reinstall tigervnc-server
Transaction performed with:
  Installed   rpm-4.11.3-17.el7.x86_64         @rhel-7-server-rpms
  Installed   subscription-manager-1.15.9-15.el7.x86_64 @rhel-7-server-rpms
  Installed   yum-3.4.3-132.el7.noarch         @rhel-7-server-rpms
Packages Altered:
  Reinstall tigervnc-server-1.3.1-3.el7.x86_64 @rhel-7-server-rpms
history info

您还可以查看其他信息,如事务时使用的配置选项,或者从哪个存储库以及安装某些软件包的原因。要确定某个事务有哪些可用的额外信息,以 root 用户身份在 shell 提示符后输入以下内容:

yum history addon-info id

yum history info 类似,如果没有提供 id,yum 会自动使用最新的事务。引用最新事务的另一种方法是使用 最后一个 关键字:

yum history addon-info last

例 9.24. yum history addon-info输出示例

对于历史记录中的第四个事务,yum history addon-info 命令提供以下输出:

~]# yum history addon-info 4
Loaded plugins: langpacks, product-id, subscription-manager
Transaction ID: 4
Available additional history information:
 config-main
 config-repos
 saved_tx

history addon-info

yum history addon-info 命令的输出中提供了三种类型的信息:

要显示所选类型的附加信息,以 root 用户身份运行以下命令:

yum history addon-info id information

9.4.3. 恢复和重复事务

除了查看事务历史记录外,yum history 命令还提供了恢复或重复所选事务的方法。要恢复事务,以 root 用户身份在 shell 提示符后输入以下内容:

yum history undo id

要重复特定的事务,以 root 用户身份运行以下命令:

yum history redo id

两个命令也接受 最后一个关键字来 撤销或重复最新的事务。

请注意,yum history undoyum history redo 命令只会恢复或重复事务期间执行的步骤。如果事务安装了新软件包,yum history undo 命令将将其卸载,如果事务卸载了软件包,命令将再次安装它。如果这些较旧的软件包仍然可用,这个命令还会尝试将所有更新的软件包降级到之前的版本。

管理多个相同的系统时,yum 还允许您对其中一个系统执行事务,将事务详细信息存储在文件中,并在经过一段时间测试后,在剩余系统上重复同样的事务。要将事务详情保存到文件中,以 root 用户身份在 shell 提示符后输入以下内容:

yum -q history addon-info id saved_tx > file_name

将此文件复制到目标系统后,您可以以 root 用户身份运行以下命令重复事务:

yum load-transaction file_name

您可以配置 load-transaction 来忽略缺少的软件包或 rpmdb 版本。有关这些配置选项的更多信息,请参阅 yum.conf(5)man page。

9.4.4. 启动新事务历史记录

yum 将事务历史记录存储在单个 SQLite 数据库文件中。要启动新的事务历史记录,以 root 用户身份运行以下命令:

yum history new

这将在 /var/lib/yum/history/ 目录中创建一个新的空数据库文件。将保留旧的事务历史记录,但只要 目录中存在更新的数据库文件,就无法访问。