最终目标是减少应用程序及其依赖项占用的空间。为此,我们需要了解软件包及其依赖项的大小。
不幸的是,任何有经验的 Linux 用户都会告诉你,没有安全的方法可以自动删除依赖项,即通过脚本。如果你这样做,不可避免地会破坏某些东西。所以你必须手动进行。
因此,用户需要某种方法来找出占用磁盘空间的内容,因为仅靠软件包大小是不够的。我在网上搜索了提供此信息的命令,但没有找到,所以我自己构建了一个。
答案1
然而,自动删除依赖关系是有风险的。因此,如果你想自己做,那么这个工具可以回答一个重要的问题:做什么。
关注您想要实现的结果:降低自动删除依赖项的风险。
使用和列出包的依赖项和反向依赖项。这些是基本命令,可以根据不同的具体情况进行定制,如下所示。apt-cache depends <package-name>
apt-cache rdepends <package-name>
apt-cache 后面的软件包名称可以是单个软件包名称,也可以是多个软件包名称的列表。
如果结果太长不易于阅读,则通过管道将
apt-cache
命令结果传输到less
仅返回结果的第一部分。| less
安装 deborphan 并
sudo apt install deborphan
运行,deborphan
在卸载某些软件包后显示孤立软件包列表。除非您仍在使用刚刚卸载的任何软件包,否则这些孤立软件包不再需要。不幸的是,deborphan
手动安装的 .deb 软件包(不是通过正常软件源安装的)也会报告为孤立软件包,因此deborphan
应与一起使用,apt-cache
以确保您不会卸载任何您仍然需要的软件包,即使deborphan
它们被报告为孤立软件包。
巧妙地组合使用所有这些命令将节省大量时间,而不必阅读长长的所有软件包列表、它们的大小、它们的依赖项及其大小,只需关注您需要的结果即可。使用这些命令,只需几分钟即可在将 Ubuntu 升级到较新的版本后清理已安装软件包列表。对于这项特定任务,我还喜欢使用 Synaptic 软件包管理器,因为它具有用户友好的图形界面和强大的软件包过滤功能。
答案2
请注意,此操作需要 aptitude 包。
for z in $(dpkg -l | awk '/^[hi]i/{print $2}' | grep -v '^lib'); do \
printf "\n$z:" && \
aptitude show $z | grep -E 'Uncompressed Size' && \
printf "\n" && \
apt show 2>/dev/null $(aptitude search '!~i?reverse-depends("^'$z'$")' -F "%p" | \
sed 's/:i386$//') | grep -E 'Package|Installed-Size' | sed '/APT/d;s/^.*Package:/\t&/;N;s/\n/ /'; done