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

use*_*402 23 package-management apt

我知道如何删除已卸载包的依赖项?我试过

apt-get autoremove
Run Code Online (Sandbox Code Playgroud)

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

也就是说,如果我安装了一个推荐 Y 的包 X,但我没有安装 Y,然后我安装了依赖于 Y 的包 Z,然后我安装了

apt-get remove --auto-remove Z
Run Code Online (Sandbox Code Playgroud)

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

Tot*_*tor 20

如果您想从系统中删除推荐的软件包,即使仍有一些已安装的软件包推荐(或建议)它们,请将以下内容放入文件中/etc/apt/apt.conf.d/99_norecommends(创建它):

APT::Install-Recommends "false";
APT::AutoRemove::RecommendsImportant "false";
APT::AutoRemove::SuggestsImportant "false";
Run Code Online (Sandbox Code Playgroud)

这些选项的文档在这里

然后,下一次 apt run (try apt-get autoremove) 应该将它们全部删除。如果没有,请启动aptitudeg然后g再次输入。

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

  • InstallRecommends:因为为什么要安装 5MB 的东西,什么时候还可以安装 1GB 的不需要的东西? (4认同)
  • @Braiam 这不是 OP 所问的。你的评论是给他的,不是给我的。 (2认同)

Rol*_*olf 12

覆盖 APT 选项

与依赖项不同,自动安装的“推荐”或“建议”包可能会被apt-get autoremove.

如别处所述,可以在配置中更改 APT 的这种行为。

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

这就是,除了未使用的依赖项之外,您将如何强制 autoremove 删除剩余的“推荐”和“建议”包。

sudo apt-get autoremove -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0
Run Code Online (Sandbox Code Playgroud)

警告!

某些功能可能会丢失。准备调查和重新安装东西。不理会这些包可能更容易。

其他选项

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

  • 要简单地**分析**此类包,请使用`apt-get`的`-s`选项执行**干运行**并通过管道传输到`grep ^Remv` - 这就是命令:`apt-get autoremove -s -o APT::Autoremove::RecommendsImportant=0 -o APT::Autoremove::SuggestsImportant=0 | -o APT::Autoremove::SuggestsImportant=0 grep ^Remv` (3认同)

Bra*_*iam 2

实际上命令是:

sudo apt-get autoremove <Z>
Run Code Online (Sandbox Code Playgroud)

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

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

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

sudo apt-get autoremove <Z> <dependency of Z>
Run Code Online (Sandbox Code Playgroud)

这样您就可以确保您的包裹被删除。

您还可以使用 deborphan 删除一些依赖项。

  • 是的,你完美地描述了我的问题。谢谢。但是,不幸的是,您还没有解决它,因为我不想去 /var/log/apt/history.log 并查找几个月前与 Z 安装的所有软件包 Y (在您的示例中, Y=java/jre, Z=icedtea 插件),然后手动将它们全部添加到 apt 命令行中。我只想指定 Z,而其余的依赖项会自动选取,*即使它们是由另一个现有包 X 建议的(在您的示例中 X=libreoffice)。 (2认同)

小智 0

是的,如果您想删除<Z>具有依赖项的包,只需键入:

sudo apt-get autoremove --purge <Z>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但不幸的是,添加“--purge”只会删除使用“autoremove”删除的包的配置。但据我所知,它并没有改变关于要删除*哪些*包的决定。也就是说,无论我是否指定“--purge”,某些预先存在的包 X 建议的 Z 依赖项仍然不会被删除。 (4认同)