查找大型文件/目录以删除并释放空间的命令行方式是什么?


202

寻找一系列命令,这些命令将向我显示驱动器上最大的文件。


图形化的东西会好吗?
RolandiXor

5
不,在ssh的命令行上运行。
Ryan Detzel 2011年

奇怪的是,我有两台服务器正在运行同一件事。一种是磁盘使用率是50%,另一种是99%。我找不到造成这种情况的原因。
Ryan Detzel 2011年

所以我很困惑,它说98%的人使用了du,但是当我运行gt5
Ryan Detzel 2011年

Answers:


275

如果只需要查找大文件,则可以使用find-size选项。下一条命令将列出所有大于10MiB的文件(不要与10MB混淆):

find / -size +10M -ls

如果要查找某个大小的文件,可以将其与“小于大小”搜索结合使用。下一条命令查找10MiB和12MiB之间的文件:

find / -size +10M -size -12M -ls

apt-cache search 'disk usage'列出了一些可用于磁盘使用率分析的程序。一个看起来非常有前途的应用程序是gt5

从包装说明中:

几年过去了,磁盘变得越来越大,但是即使在这个令人难以置信的巨大硬盘时代,空间似乎也会随着时间消失。这个小型有效的程序比默认的du(1)提供了更方便的列表。它显示自上次运行以来发生的情况,并显示目录大小和总百分比。通过基于文本的浏览器(链接,elink,lynx等)使用光标键,可以导航和升至目录

gt5的屏幕截图

gt5的“相关软件包”部分中,我发现了ncdu。从其包装说明中:

Ncdu是基于ncurses的du查看器。它通过著名的du实用程序提供了一个快速且易于使用的界面。它允许通过ncurses库浏览目录并显示磁盘使用百分比。

ncdu的屏幕截图


3
ncdu非常快,正是我需要的,谢谢!我也尝试过gt5,但只是取消了它,因为它“思考”的时间太长而没有任何反馈
Lukas

7
废话,ncdu太神奇了,谢谢您分享您的发现!
While-E

如果ncdu被指出更强大,我将不胜感激。我偶尔需要它,但我记不起来了。
马丁·托马

多亏了ncdu :)足够记住命令了:
Coder先生

1
@matt不,输出的输出格式-ls是硬编码的(请参阅pred_flslist_file函数的源代码)。您可以尝试使用-printf选项近似输出,使用awk对输出进行后处理,或使用类似find ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn

33

我只是用的组合dusort

sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home

然后是冲洗并重复的情况。定位您认为太大的子目录,为它们运行命令,然后找出导致问题的原因。

注意:我使用du-x标志将内容限制在一个文件系统中(在SSD和RAID5之间,我有很复杂的交叉安装内容安排)。

注意2:2>/dev/null将所有错误消息重定向到遗忘中。如果他们不打扰您,则不是强制性的。


1
当我运行此命令时,du会进入子目录。在du手册页中:“递归总结目录中每个文件的磁盘使用情况。”
杰米

26

我最喜欢的解决方案是结合使用以下几种好的答案。

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

du 参数:

  • -a用于“所有”文件和目录。只保留目录
  • -BM 以兆字节(M)块大小(B)输出大小
  • 2>/dev/null -排除“权限被拒绝”错误消息(感谢@Oli)

sort 参数:

  • -n 用于“数字”
  • -r 用于“反向”(从大到小)

head 参数:

  • -n 50 排名前50位的结果。
  • more如果使用较小的数字,则保留

注意:前缀包括sudo要包含您的帐户无权访问的目录。

该示例显示/ var(包括总计)中排名前10位的最大文件和目录。

cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/apache2
587M    ./log/apache2/ssl_access.log
273M    ./cache

10

qbi的答案是正确的,但是当文件很多时,它将非常慢,因为它将为每个项目启动一个新的ls进程。

使用find而不产生子进程的更快版本是使用printf打印大小(以字节(%s)为单位)和路径(%p)

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries


1
确认速度更快
Cookie的

10

若要显示当前文件夹中最大的前20个目录,请使用以下一种格式:

du -ah . | sort -rh | head -20

或(更多面向Unix):

du -a . | sort -rn | head -20

对于当前目录中前20个最大的文件(递归):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

或具有人类可读的尺寸:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

请注意,该功能-h仅适用于GNU sort,因此要使其在OSX / BSD上正常运行,必须从安装coreutils。然后将其文件夹添加到您的中PATH

因此,这些别名对于在rc文件中使用很有用(每次需要时):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

8

这似乎是完美的应用程序find

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

此命令将在目录中找到所有文件$DIRECTORY并对其执行ls -s。最后一条命令显示分配的文件大小和文件名。对结果进行数字排序,并显示最后五个条目。因此,您将在$DIRETORY该目录或任何子目录中看到最大的5个文件。如果输入tail -n 1,则只会看到最大的文件。

此外,您还可以玩find。例如,您可以查找小于n天(-ctime -n)或属于特殊用户(-user johndoe)的文件。


5

当我需要在服务器上腾出更多可用空间时,请使用此命令。它发现所有大于50 MB的文件,“ du -h”使文件列表更好,而“ pipe -make”列表按文件大小进行数字排序后则“ sort -n”。

find / -size +50M -type f -exec du -h {} \; | sort -n


1

例如,要查找所有GB文件,我将使用du和grep,尽管这里提到的其他方法也很不错。

du -h -a /dir | grep "[0-9]G\b"  

您也可以使用du具有的--except选项来欣赏。


0

您还可以按大小对文件排序:

find . -type f -exec du -h {} \; | sort -k1 -h

它仅查找文件并du -h针对每个文件执行,显示文件的大小。最后,我们根据第一列(以人类可读的格式)对find/ 的输出进行排序du

最后打印的文件是最大的文件。


0

您可以在跳过目录的同时使用命令查看最大的文件:

sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10

要查找所有大于100MiB(不是100MB)的文件,如果感到困惑,请参见此处

find / -size +100M -ls

下面的命令将显示该文件夹中最大的5个文件$DIRECTORY

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

使用du:下面使用du的命令显示home工作文件夹中最大20个目录的目录:

sudo du -a /home | sort -n -r | head -n 20

现在,为了显示最大的目录/文件(包括子文件夹),请运行:

du -Sh | sort -rh | head -n 10

使用ls

要列出/ bin目录中5个最大的文件,请发出以下命令:

ls -lSh /bin | head -5

您也可以使用磁盘使用分析器或宝宝这里的例子。


0

回答类似问题的一个很棒的,用户友好的工具是NCurses Disk Usage

sudo ncdu /

好吧,从文件系统的根目录开始对我毫无意义。它使我能够确定在整个文件系统中节省空间的最重要目标。无论如何,您都可以使用上面提到的在任何目录下启动。查看该工具的文档。但是,根据要求,这是源答案的链接。
janoside
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.