【问题标题】:How do I uninstall all rpms installed today with yum?如何卸载今天使用 yum 安装的所有 rpm?
【发布时间】:2015-07-21 13:50:40
【问题描述】:

我很熟悉

rpm -qa --last

并且发现它在某些场合非常方便。然而,这一次我不小心有点过火了,安装了一个大的 yum 组。

yum groupinstall "Development tools"

有没有一种简单的方法可以卸载我刚刚安装的所有内容?在我看来,应该有某种方法可以结合 rpm 查询和 rpm 擦除。即将查询命令的输出传递到删除命令。

更新:基于用户@rickhg12hs 反馈

有人指出,我可以看到带有yum history 的交易ID,这是我不知道的。看起来是这样的:

$ yum history

Loaded plugins: fastestmirror, security
ID | Login user               | Date and time    | Action(s)      | Altered
----------------------------------------------------------------------------
69 |  <jds>                   | 2015-05-11 01:31 | Install        |    1   
68 |  <jds>                   | 2015-05-11 01:31 | Install        |    1   
67 |  <jds>                   | 2015-05-11 01:10 | I, U           |  210   
66 |  <jds>                   | 2015-05-05 12:41 | Install        |    1   
65 |  <jds>                   | 2015-04-30 17:57 | Install        |    2   
64 |  <ansible>               | 2015-04-30 10:11 | Install        |    1   
63 |  <ansible>               | 2015-04-30 10:11 | Install        |    1   
62 |  <ansible>               | 2015-04-30 10:11 | Install        |    1 EE
61 |  <ansible>               | 2015-04-30 10:11 | Install        |    1   
60 |  <ansible>               | 2015-04-30 10:11 | Install        |    1   
59 |  <ansible>               | 2015-04-30 09:58 | Install        |   19 P<
58 |  <ansible>               | 2015-04-29 18:28 | Install        |    1 > 
57 |  <ansible>               | 2015-04-29 18:28 | Install        |    1   
56 |  <ansible>               | 2015-04-29 18:28 | Install        |    9   
55 |  <ansible>               | 2015-04-29 18:28 | Install        |    3   
54 |  <ansible>               | 2015-04-29 18:28 | Install        |    1   
53 |  <ansible>               | 2015-04-29 18:27 | I, U           |    5   
52 |  <ansible>               | 2015-04-29 18:27 | I, U           |    4   
51 |  <ansible>               | 2015-04-29 18:27 | Install        |    1   
50 |  <ansible>               | 2015-04-29 18:27 | Install        |    1   

还有 tada:就是这样,一个交易 ID。

我想从事务 id 67 卸载。所以现在我有点聪明了,我有一个新问题。

那么如何使用 yum 或 rpm 命令来卸载事务呢?

注意:也有人向我指出我可以做一个

$ yum history info 67 |less

Loaded plugins: fastestmirror, security
Transaction ID : 67
Begin time     : Mon May 11 01:10:09 2015
Begin rpmdb    : 1012:bb05598315dcb21812b038a356fa06333d277cde
End time       :            01:13:25 2015 (196 seconds)
End rpmdb      : 1174:cb7855e82c7bff545319c38b01a72a48f3ada1ab
User           :  <jds>
Return-Code    : Success
Command Line   : groupinstall Additional Development
Transaction performed with:
   Installed     rpm-4.8.0-38.el6_6.x86_64                     @updates
   Installed     yum-3.2.29-60.el6.centos.noarch               @anaconda-CentOS-201410241409.x86_64/6.6
   Installed     yum-plugin-fastestmirror-1.1.30-30.el6.noarch @anaconda-CentOS-201410241409.x86_64/6.6
Packages Altered:
   Dep-Install GConf2-2.28.0-6.el6.x86_64                                @base
   Install     GConf2-devel-2.28.0-6.el6.x86_64                          @base
   Dep-Install ORBit2-2.14.17-5.el6.x86_64                               @base
   ... snip ...

我认为这在某些情况下可能会很有帮助。

【问题讨论】:

  • 关闭但没有雪茄:sudo rpm -qa --qf '%{INSTALLTIME:date}: %{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}\n' |grep "Mon 11 May 2015"|cut -d ':' -f4 |xargs rpm --nodeps -e
  • 如果您使用yum 进行所有安装,您应该能够使用yum history 安全地进行undorollback 您的交易。详情请见man yum
  • 请显示yum history的输出。你看到你的交易ID了吗? yum history info your_transaction_ID 是否显示所有已安装的软件包?
  • @rickhg12hr 我不知道yum history ...是的,我看到我更改了 210 个包的交易。是的:yum history info 67 向我展示了它们!那么如何卸载交易呢?
  • 阅读man yum 并决定yum history undoyum history rollback 是否更适合您的需求。

标签: centos fedora redhat rpm yum


【解决方案1】:

如果您卸载软件包,那么您将面临删除已经存在但碰巧升级的东西的风险。作为一项规则,您应该使用yum(或等效项)来管理包,这允许您降级一个包。这将删除新软件包,并降级现有软件包。例如见How to safely downgrade or remove glibc with yum and rpm

可以使用rpm -qa 的输出来选择要降级的软件包的名称,其格式允许简单地选择给定的日期。例如(参见CentOS: List the installed RPMs by date of installation/update?),您可以使用

按照安装日期的相反顺序列出软件包
rpm -qa --last

作为一种更精细的方法,您可以使用--queryformat 选项和:date 选项来完全按照您的需要格式化日期(它使用strftime)。

在任何一种情况下,您都可以编写一个脚本来从rpm 的输出中提取包名,并根据需要使用这些包与yum(甚至rpm)进行操作。

在进行降级时,要记住一件奇怪的事情:将软件包的安装日期修改为当前日期,而不是使用前一个日期完全撤消。

【讨论】:

    【解决方案2】:

    在单个事务中安装的所有软件包都有 一个相同的 RPMTAG_INSTALLTID 标签值。

    使用

    rpm -qa --qf '[%{name}\t%{installtid:date}\n]'
    

    查找作为 yum 组安装的一部分安装的所有软件包。

    【讨论】:

    • installtid 没有出现在输出中。运行rpm-4.8.0-38.el6_6 但是:我真正想知道的是如何从一个事务ID 中卸载所有包(其中有210 个)。有没有一个漂亮的 rpm 或 yum 命令可以做到这一点?
    • 它显示为日期,因为后缀为 :date。删除它,它将显示为一个数字
    【解决方案3】:

    Yum 为您提供了撤消命令的功能,即yum history undo #blah

    在您的情况下,要删除您今天安装的所有软件包,您可以运行:

    yum history undo 69
    yum history undo 68
    yum history undo 67
    

    【讨论】:

      猜你喜欢
      • 2012-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-29
      • 1970-01-01
      • 2012-06-22
      • 2017-01-07
      • 2016-07-18
      相关资源
      最近更新 更多