如何使用yum卸载今天安装的所有rpms?

时间:2015-05-11 06:50:43

标签: centos fedora redhat rpm yum

我非常熟悉

rpm -qa --last

并且发现它在某些场合非常方便。然而,在这种情况下,我不小心有点过分热心,并安装了一个大型的yum组。

yum groupinstall "Development tools"

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

更新:基于用户@ 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 ...

我认为在某些情况下这可能会非常有用。

3 个答案:

答案 0 :(得分:2)

如果你卸载软件包,那么你就有可能删除已经存在的东西,但是碰巧升级了。通常,您应该使用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)的包来根据需要进行操作

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

答案 1 :(得分:1)

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

使用

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

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

答案 2 :(得分:1)

Yum规定您可以撤消命令,即yum history undo #blah

对于您而言,要删除您今天安装的所有软件包,可以运行:

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