哪些已安装的软件包在Debian上使用最多的磁盘空间?


76

我的根分区上的磁盘空间即将用尽,因此我想从系统中删除一些应用程序。如何查看哪些软件包使用最多的磁盘空间?可以从中查看aptitude吗?

我知道类似df或的通用磁盘空间分析器baobab,但是我需要已安装应用程序的解决方案。


Answers:


53

最容易的是跑步wajig large。该软件包应为apt-install-away。

这是其他方法的两个链接:

还要记住,安装的大小只是软件包占用空间的一部分。压缩版本可能仍在缓存中,这也占用了一些空间。您可以使用将其删除apt-get clean


4
清空软件包缓存的命令是apt-get clean。“清除检索到的软件包文件的本地存储库” – man apt-get
manatwork 2012年

97

最简单的方法(不安装额外的软件包)是:

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

它按大小顺序显示包裹,最后一个包裹。

不幸的是,在至少某些系统上,此列表包括已删除但尚未清除的软件包。可以通过运行以下命令清除所有此类软件包:

dpkg --list |grep "^rc" | cut -d " " -f 3 | xargs sudo dpkg --purge

或者,如果您不想清除已卸载的软件包,则可以使用此变体从列表中过滤掉未处于“已安装”状态的软件包:

dpkg-query -Wf '${db:Status-Status} ${Installed-Size}\t${Package}\n' | sed -ne 's/^installed //p'|sort -n

2
“已安装大小”是对已安装软件包将需要多少空间的优先估计。恐怕不是实际尺寸。
罗尔夫(Rolf)'18年

23

既然您想see which [installed] software packages use the most disk space[,] from aptitude...当然可以使用aptitude!通过其CLI或{interactive,TUI,non-CLI}来实现。让我们先讨论CLI,然后再讨论TUI。无论哪种方式,您只需要知道

  • 使用的命令行选项。后面的文本使用长选项(以便于搜索文档),但是当然也可以使用短选项。
  • 使用的命令行参数
  • 使用的输出格式字符串

最基本的命令行来显示哪些已安装的软件包使用了最多的磁盘空间

aptitude search --sort '~installsize' --display-format '%p %I' '~i' | head

所以让我们分解一下:

  • --sort是程序包排序顺序,并~installsize指定程序包排序策略
  • installsize表示“排序(估计的)安装大小”,而前面的~表示排序降序(因为所有排序策略的默认值都是升序的)。
  • --display-format更改<you guessed :->。该格式字符串 '%p %I'告诉aptitude输出包的名称,然后安装尺寸。
  • '~i'告诉aptitude您仅搜索已安装的软件包。
  • ......,除非你有非常少安装包(我还挺泛型Debian的工作站拥有超过2400),你要管headless或文件,或者只是wc -l看看有多少行aptitude会被返回。

您可能还想

  1. 使用指定aptitude显示时要使用的行宽(以字符为单位)--width <your desired integer value/>aptitude将默认设置为您认为的终端宽度,但有时会猜错,有时您想写入文件等。
  2. 在格式字符串中显示更多信息,或更改字段宽度。例如,我的增强格式字符串'%30p %I %r %60d'显示

    • %30p :包名称(字段宽度= 30个字符)
    • %I :估计安装大小
    • %r :'反向取决于计数':取决于此软件包的其他已安装软件包的大约数量
    • %60d :包的简短说明,字段宽度= 60个字符

请注意,如果在输出字段中看不到更改,则可能需要设置--width

...,您也可以在{interactive,TUI}中进行此类操作aptitude。例如,设置显示格式首选项,

  • 单击或导航到选项->首选项
  • 滚动到包视图的显示格式
  • %I在所需位置添加到当前值

要将搜索范围限制为交互式中已安装的软件包aptitude

  • 按下l(小写L
  • ~i在对话框中输入

要在互动广告中按已安装的大小进行排序aptitude

  • Shift-S(大写S
  • installsize在对话框中输入

参考文献:


不确定是否有办法做到这一点,但是始终以kB为单位打印大小会很好,这样可以使排序或后处理变得更加容易。
derobert

@derobert一直在寻找如何控制aptitude输出中的空白,而且显然也无法更改size的输出。
Braiam 2014年

@Braiam是的,如果我删除,获得的总空间是多少*texlive*
terdon

@terdon mm ...还aptitude -s remove '?and(texlive,~i)'不够吗?另外,您可以将用户标签添加到某些程序包中,以便可以整体操作它们(如任务)。
Braiam 2014年

9

如果您不想安装wajig。我想每个人都安装了debian-goodies:

dpigs              - Show which installed packages occupy the most space

wajig需要python 3,这又是40mb。debian-goodies需要python 2.6+,因此还需要700kb。这或JosephH的答案是最好的!
蒂姆·奥布莱恩

我注意到dpigs实际上具有与相同的结果dpkg-query -Wf '${Installed-Size}\t${Package}\n' | sort -nr | head,后者是已安装的软件包中占据最大空间的前十名。仍然,dpigs简单而简短。
clearkimura

8

首先,使用像一个工具baobabsudo apt-get install baobab)向您展示其中正在使用该空间:

在此处输入图片说明

这将为您提供漂亮的图形概述,并帮助您缩小占用空间的范围。您还可以使用du以下命令在命令行上获取此信息:

$ sudo du -ch /

通过此传递sort(假设GNU sort,在Debian中应该是这种情况)按目录大小排序:

$ sudo du -ch / | sort -h

下一步,您可以使用以下命令查看特定程序包正在使用多少空间:

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

例如,在我的系统上,删除所有texlive软件包将释放1,502 MB的空间:

$ sudo apt-get --assume-no --purge remove "texlive*" | grep "be freed" | 
   awk '{print $4, $5}' 
1,502 MB

最后,您可以使用以下命令获取所有已安装软件包的信息:

$ for i in $(dpkg -l | awk '($1=="ii"){print $2}'); do  
    echo -e "$i\t"$(sudo apt-get --assume-no --purge remove "$i" | 
                    grep "be freed" | awk '{print $4, $5}'); 
  done


3

添加到其他答案,如果您喜欢命令行,则可以使用旧版 durep

# durep -td 1 /etc                         # or -td 2
[ /etc   319.4K (60 files, 43 dirs) ]
  90.2K [########                      ]  28.26% apache2/
  27.5K [##                            ]   8.62% apt/
  23.7K [##                            ]   7.43% mime.types
  19.7K [#                             ]   6.18% cron.daily/
  18.7K [#                             ]   5.87% services
  18.0K [#                             ]   5.64% security/
  14.7K [#                             ]   4.61% init.d/
  13.2K [#                             ]   4.13% ssl/
  11.1K [#                             ]   3.48% ld.so.cache
   9.0K [                              ]   2.81% locale.gen
   7.8K [                              ]   2.43% pam.d/
   4.5K [                              ]   1.42% default/
   4.3K [                              ]   1.35% skel/
   2.9K [                              ]   0.92% locale.alias

您可以使用以下方法释放空间 localepurge

# dpkg-reconfigure localepurge
# localepurge
localepurge: Disk space freed in /usr/share/locale: 26160 KiB
localepurge: Disk space freed in /usr/share/man: 1304 KiB

Total disk space freed by localepurge: 27464 KiB

最后,您可能会摆脱有时会占用大量空间的图标和字体。在此网站上查看详细信息

https://ownyourbits.com/2017/02/18/squeeze-disk-space-on-a-debian-system/

(示例摘自ownyourbits)


dpkg-reconfigure localepurge抱怨localepurge软件包不可用。
罗尔夫(Rolf)'18年

2

增加了更多的工具列表中,我一直使用debfoster,并deborphan在我的系统。它们对于寻找升级后仍然存在的旧依赖性非常有用。

apt-get autoremove很棒,但是并不能得到所有东西,而且由于它遵循安装标记,因此它并不总是知道您希望保留什么。不过,使用apt-mark可以将其定向到某种程度。

检查:https : //wiki.debian.org/ReduceDebian


0

虽然这是一个不错的工具集合,但我会在其中添加KDE / QT Filelight,这与其他gui磁盘空间使用工具类似,但这并不是主题标题的字面答案。

如果从字面上看这个线程的问题,也就是说,系统中最大的软件包通常是:

libreoffice软件包套件,它不是单个软件包,但确实很大。

我认为linux内核和相关的头文件包是第二位的,如果您安装了大多数系统倾向于安装的多个内核,则每个内核都在我周围大约135 mB磁盘空间每年会增加,但是这个数目很大。如果您使用非免费的视频驱动程序,那么也会有相关的驱动程序包/文件。请注意,与libreoffice一样,每个内核实际上可以由2或3个程序包(图像,标头和驱动程序程序包)组成,因此每个程序包大小计数的字面值实际上并没有那么精确,除非有一个粗略的含义。

在那之后,我知道Debian的软件包池中没有大量的大型软件包。

我发现,一旦根分区开始变得足够大,以至于您开始想知道如何删除软件包以缩小它,通常是时候将移动/调整大小到更大的根分区了。

apt-get clean当然是要清除所有缓存的.deb文件的第一件事,但是一旦删除了该文件,并且几乎说了2个内核,那么如果您仍然没有足够的空间,那它就更多了。增大分区的大小非常实用,因为清理等只是危险信号,您正在接近根分区空间,如果apt在/ var中没有足够的空间来实际下载和提取软件包,这可能是一个真正的问题。升级。通过清除操作清除已删除软件包中的剩余配置文件,因为它们很小,所以在重新获得磁盘空间方面根本没有任何好处,但现在最好只是清理碎片,但这样做不应该。不要误以为实际上重新获得了任何有意义的磁盘空间。

apt-get auto-remove也不错,但是请注意,有时删除软件包是错误的,因此您在apt删除内容之前要仔细检查该列表。从技术上讲,最好清除该列表,这样一来,您也可以同时删除配置文件,删除或自动删除(我相信会保留它们)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.