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

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

假设我有一台 Debian 机器,我想通过删除无用的软件包来释放“/”上的空间。为了找到合适的候选软件包进行审查,我想首先将注意力集中在最大的软件包上。

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

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

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

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

答案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

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

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

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

闪亮的!

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

答案2

为什么不直接运行“apt autoremove”或按照以下步骤操作https://wiki.debian.org/ReduceDebian(指出逐步减少 Debian 占用空间的方法)自动删除内容。

apt autoremove 会找到不需要的包,可以将其删除,从而占用磁盘空间。

相关内容