如何在 Debian 中完全删除元包

如何在 Debian 中完全删除元包

有什么方法可以删除元包及其所有包吗?元包的子集是完全不依赖于元包的包。这就是为什么如果删除一个元包,则不会删除该包的元包子集。

例如,metapackageapache2包含一些在 install 时将安装的软件包apache2。我apt-get install apache2在 shell 中使用了该命令,synaptic并安装了一些软件包。现在,如果我apache2通过apt-get autoremove apache2命令删除元包,或者仅synaptic删除apache2包,并且作为元包子集的其他包不会被删除。

在我看来,最好的方法是删除元包中的所有包。如何解决问题?

答案1

据我所知apache2不是元包。各种包都有依赖关系,因此安装apache2也会导致安装其他包,但这并不会使它们成为元包。

无论如何,我不确定您到底想实现什么目标,所以我会给您一些选择:

  1. 如果您想删除不再需要的软件包,例如由您安装的软件包,apache2并且在您删除它后不再需要,请使用autoremove

    apt-get autoremove
    
  2. 如果你确实想删除真正的元包安装的所有包,你可以这样做(以wicd元包为例):

    我。通过搜索日志找到metapackage安装的包apt

    $ grep -A 3 wicd /var/log/apt/history.log
    Commandline: apt-get install wicd
    Install: rfkill:amd64 (0.4-1, automatic), wicd:amd64 (1.7.2.4-4), python-wicd:amd64 (1.7.2.4-4, automatic), wicd-daemon:amd64 (1.7.2.4-4, automatic), wicd-gtk:amd64 (1.7.2.4-4, automatic)
    End-Date: 2013-05-07  18:10:24
    

    二.您可以解析它以仅获取包名称:

    $ grep -A 3 wicd /var/log/apt/history.log | 
        perl -ne 's/Install:*// && do {
          @a=(/\s+([^\s]+?):/g); print "@a\n"
         }'  
      rfkill wicd python-wicd wicd-daemon wicd-gtk
    

    iii. 现在您可以删除它们(我正在打印命令apt而不是执行它,以便您可以看到它将首先卸载什么):

    $ grep -A 3 wicd /var/log/apt/history.log | 
        perl -ne 's/Install:*// && do {
          @a=(/\s+([^\s]+?):/g); print "apt-get remove @a\n"
         }'  
      apt-get remove  rfkill wicd python-wicd wicd-daemon wicd-gtk
    

相关内容