如何找到可以释放最多空间的 Debian 软件包

a3n*_*3nm 5 debian disk-usage apt package-management

假设我有一台 Debian 机器,我想通过删除无用的包来释放 '/' 上的空间。为了找到要审查的优秀候选包,我想首先将注意力集中在最大的包上。

似乎这样做的标准解决方案是按安装大小列出所有已安装的软件包。然而,这个解决方案有很多缺点,因为它忽略了依赖关系,忽略了一个包是自动安装还是手动安装:

  • 如果一个包很大但许多手动安装的包依赖于它,那么它可能不是考虑删除的好选择(例如,即使 libicu52 很大,删除它也是一个坏主意)
  • 如果一个包依赖于另一个包,那么删除第二个包也会节省删除第一个包所获得的空间(例如,删除 libwine 也删除了 wine)
  • 如果一个包 A 依赖于另一个包 B 并且第三个包 C 只是作为 B 的依赖项自动安装,那么删除 A 将删除 B 并且 C 将被自动删除,这应该被考虑在内(例如,删除 wesnoth-1.10 -data 删除了 wesnoth-1.10,这意味着 wesnoth-1.10-music 将被删除)。

似乎这项工作的正确工具应该只建议手动安装的软件包进行删除,并且应该通过删除它们然后运行 ​​autoremove(删除不再需要的自动安装的软件包)将回收的空间对它们进行排序。

当然,您可以通过此解决方案的变体来模拟这一点,但它既缓慢又丑陋。因此我的问题是:是否有一个标准工具可以查看包的依赖关系图并计算这些信息?(我正在考虑为此编写一个脚本,但我想确保它还不存在。)

lai*_*dir 1

我不知道一站式命令行解决方案,尽管所有工具都存在(apt-cache depends --installedapt-cache rdepends --installed --recurseapt-mark showmanualdpigs等)。可以将命令行脚本组合在一起,尝试查找几乎没有手动安装的反向依赖项的大型包。这是我用作起点的概念证明:

dpigs | awk 'NR == 1 {print $2}' | xargs apt-cache rdepends --installed --important --recurse | awk '!/:/ {print $1}' | sort -u
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您想在多个方向上对图进行复杂的分析(例如,哪一组手动安装的软件包具有最大的磁盘上递归依赖项重叠集),它可能很快就会失控。那时,您可能需要考虑一些更可定制的东西(awk或者python?)。

全面披露:我为以下项目做出了贡献。如果这类事情对您很重要,请考虑在内。如果我知道 Debian 存储库中已经有类似的项目,我可能会发布它。

虽然我更喜欢从命令行执行所有操作,但您可能会发现pacgraph(也在github上)上)是一个有用的替代方案。它最初是由 Kyle Keen 为 Arch Linux 编写的,但现在也与基于 deb 和 rpm 的系统兼容。我曾经有一些来自 Ubuntu 系统的示例输出,但我找不到它,所以这里有一个来自他的网站的示例:

闪亮的!

我已经有一段时间没有使用它了,但我相信还有一些标志来突出显示特定的包,并用不同的颜色表示其递归依赖项和反向依赖项。