如何删除已卸载软件包的建议和建议依赖项?


16

我知道如何删除已卸载软件包的依赖项?我尝试了

apt-get autoremove

但这不会删除其他软件包建议/建议的依赖项。

也就是说,如果我安装了推荐使用Y的软件包X,但我没有安装Y,然后又安装了依赖Y的软件包Z,后来又

apt-get remove --auto-remove Z

那么即使没有任何依赖,Y也不会自动删除。(即使X不依赖Y,X也会“捡起” Y)。


1
您能否说出这样做的包装是什么?
Braiam

有很多示例,因此我尝试在以上描述中提取问题的实质。没错,我还应该包括一个具体示例:考虑安装texlive-full。它安装了很多字体包,许多预先存在的包建议(但不是必需)(我不记得确切的字体包,但是我认为预先存在的libreoffice或matplotlib或octave暗示了这些字体)。因此,问题在于,“ apt-get install texlive-full”后跟“ apt-get remove --purge --auto-remove texlive-full”不会使系统保持相同的原始状态。
user2809402 2013年

Answers:


14

如果要从系统中删除推荐的软件包,即使仍然有一些推荐或建议安装的软件包,也请在文件中放置以下内容/etc/apt/apt.conf.d/99_norecommends(创建):

APT::Install-Recommends "false";
APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";

这些选项的文档在这里

然后,下一次适当运行将其全部删除。如果不是,请启动aptitudeg然后g再次键入。

使用时,此配置还会禁用推荐软件包的自动安装apt-get。为此aptitude,可以从控制台GUI的菜单>选项>首选项>“自动安装推荐的软件包”(取消选中它)。


我不建议您不要安装建议,因为大多数时候它们都很有用
Braiam 2014年

1
@Braiam这不是OP问的。您的评论是给他的,不是给我的。
Totor 2014年

我只是说那可能太过分了。
Braiam'1

@Braiam这是您的POV。我和InstallRecommends残疾人生活得很好。根据记录,默认情况下它是禁用的,直到Debian Squeeze发布,即从2011年2月开始(不知道Ubuntu)。此外,您可能不需要在服务器或桌面安装程序上使用相同的配置。
Totor 2014年

2
InstallRecommends:因为为什么要安装5MB所需的内容,同时还可以安装1GB不需要的内容?
Mark K Cowan

7

覆盖APT选项

与依赖项不同,可以忽略自动安装的“推荐”或“建议”软件包apt-get autoremove

如其他地方所述,可以在配置中更改APT的这种行为。

同样,apt-get可以通过-o命令行选项临时更改命令的配置。

这样,除了未使用的依赖项之外,您将强制自动删除删除剩余的“推荐”和“建议”程序包。

sudo apt-get autoremove -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0

警告!

某些功能可能会丢失。准备调查并重新安装东西。单独保留这些软件包可能会更容易。

其他选择

要仅为特定软件包卸载“推荐”和“建议”软件包,请查看apt历史记录日志。


1
要简单地分析此类软件包,请使用的选项进行apt-get-sgrep ^Remvapt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | grep ^Remv

1

实际上,命令是:

sudo apt-get autoremove <Z>

但这有一个窍门!如果任何依赖项中有其他先前安装的软件包会推荐/建议它们,则apt不会删除它们。

您没有指定什么软件包,但是例如,如果我要安装IcedTea插件,它将通过依赖项安装Java / OpenJRE。如果我使用卸载它们,sudo apt-get autoremove icedtea-7-plugin您会注意到它不会删除Java / OpenJRE,因为LibreOffice也建议使用这些软件包。

因此,要删除它们,您必须对要卸载的软件包过分具体,而正常autoremove情况下不会:

sudo apt-get autoremove <Z> <dependency of Z>

这样,您可以确定您的包裹已被移除。

您也可以使用deborphan删除某些依赖项。


1
顺便说一句,我从apt联机帮助页中了解到,autoremove不需要软件包名称,只会清除系统中所有不需要的软件包依赖项。因此,您必须执行2个步骤:“ apt-get remove Z”和“ apt-get autoremove”。如我最初的问题所述,这两个步骤可以使用“ apt-get remove --auto-remove Z”一次完成。但是,就像我说的那样,问题在于,如果有其他建议,某些剩余的软件包不会被删除。
user2809402 2013年

1
是的,您完美地描述了我的问题。谢谢。但是,不幸的是,您尚未解决它,因为我不想转到/var/log/apt/history.log并查找几个月前与Z一起安装的所有软件包Y(在您的示例中, Y = java / jre,Z = icedtea插件),然后将其全部手动添加到apt命令行中。我只想指定Z,其余的依赖项将自动提取,即使它们由另一个现有软件包X 建议(在您的示例中X = libreoffice)也是如此。
user2809402 2013年

1
不幸的是,这是apt系统的工作方式,它宁愿保持安装包而不是删除它们,即使不再需要它们了。删除它们的唯一方法是手动或使用,deborphan但是deborphan可能仍会丢失某些软件包。您可以使用这些Debug::选项,也可以查看我对此的其他答案。您也可以使用--no-install-recommends,但apt-get默认情况下不安装建议的软件包。
Braiam 2013年

@ user2809402,您还应该查看askubuntu.com/q/244470/169736
Braiam 2013年

Braiam-感谢您的deborphan指针。我会看看。
user2809402 2013年

-1

正确,如果您要删除<Z>具有依赖性的软件包,请键入:

sudo apt-get autoremove --purge <Z>

3
谢谢,但是不幸的是,添加“ --purge”只会删除通过“ autoremove”删除的软件包的配置。但据我所知,它不会更改有关删除哪些软件包的决定。也就是说,无论我是否指定“ --purge”,某些预先存在的软件包X所建议的Z依赖性都不会被删除。
user2809402 2013年

1
此外,autoremove在整个系统范围内均可使用。因此,无论何时调用autoremove,它都会删除系统上所有未使用的软件包。安装软件包后,autoremoving通常不会使系统返回相同的状态,而是会留下一堆“剩余”软件包。
罗尔夫
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.