如何显示清除软件包后 Debian 中释放的磁盘空间?

如何显示清除软件包后 Debian 中释放的磁盘空间?

我想删除不需要的软件包。我已经删除了大文件(使用 k4dirstat),只剩下几百个我安装的软件包,但大多数我都没用(安装没有 /home,占用 15GB)。

可以使用“apt-get purge”单独删除具有依赖关系的软件包,并查看将释放的空间。但是,这种查看软件包占用空间的方式速度慢且需要手动操作,这是一个问题。

在 Debian 下,如何显示软件包并释放其磁盘空间?

答案1

这绝对是一个有趣的问题。我见过的唯一一个给出“XX 将被释放”输出的东西似乎是“apt-get remove”。更奇怪的是,它没有使用 -s(“dry run”)命令行选项为您提供该行。

警告[0]:这意味着使用 apt-get 确定输出需要以 root 身份运行。所以,为了 Bob 的利益,请务必先在可扩展的 VM 上进行测试!

警告[1]:在开始删除软件包之前,请确保您知道自己在做什么。这将检查系统上的每个软件包,并查看如果删除它们将恢复多少空间(根据 apt-get 的报告)。这并不意味着删除它们是安全的。我不承担任何责任!

还值得一提的是:这可能会非常非常慢。希望这是您在需要时根据具体情况运行的,而不是重复运行。

话虽如此,我还是为您提供了我 2013 年的最后一个解决方案。希望它能有所帮助。

#!/bin/bash 
for I in `dpkg --get-selections | grep install | grep -v adduser | grep -v apt | awk '{print $1}'`; 
do
    echo -n "$I : "
    apt-get --assume-no --purge remove $I | grep "will be freed" | awk '{print $4, $5}' >> ~/package_script.out
done

我在 ubuntu 下编写并测试了它,因此它应该可以在 debian 等系统中正常工作。

更新:我添加了一个过滤器,以将 adduser 和 apt 软件包从考虑中删除。前者太“核心”而无法删除,而且需要很长时间,后者似乎永久锁定。A 可能还有更多这样的软件包……

答案2

您也可以遵循@GeminiDomino 建议的相同基本想法,但仅限于您指定的包:

sudo apt-get --assume-no --purge remove PACKAGE | grep "will be freed" | 
  awk '{print $4, $5}' 

您可以通过添加以下行将其转变为函数~/.bashrc

space_freed(){
    sudo apt-get --assume-no --purge remove "$@" | grep "freed.$" | 
      awk '{print $4, $5}' 
}

然后您可以从命令行给出多个包名称:

$ space_freed thunderbird firefox chromium
239 MB

我以为你会知道软件包名称,否则这会花很长时间。不过,你可以使用我的方法列出所有软件包的大小。此命令将打印所有已安装软件包的名称:

$ dpkg -l | awk '($1=="ii"){print $2}'

如果您运行space_freed该命令输出的每一行,您将获得所有已安装软件包的列表以及卸载它们后释放的空间:

for i in $(dpkg -l | awk '($1=="ii"){print $2}'); do  
 echo -e "$i\t"$(space_freed $i); 
done

最简单的方法是使用wajig列出最大的已安装包:

wajig large

答案3

显示包裹尺寸

突触

转到“设置>首选项”,选择“列和字体”,然后勾选“安装大小”。

dpkg-查询

dpkg-query --showformat='${Package}\n${Description}' -W {package-names/patterns}


显示最大的已安装软件包来源

dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -n

wajig large

dpigs

sed -ne '/^Package: \(.*\)/{s//\1/;h;};/^Installed-Size: \(.*\)/{s//\1/;G;s/\n/ /;p;}' /var/lib/dpkg/status | sort -rn

awk '{if ($1 ~ /Package/) p = $2; if ($1 ~ /Installed/) printf("%9d %s\n", $2, p)}' /var/lib/dpkg/status | sort -n | tail

答案4

试试看aptitude...这是一个基于 CLI 的包管理器,具有易于使用的键绑定。您可以在界面的右上角看到清除一组包将释放多少空间。

相关内容