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

评论

图形化的东西会好吗?

不,通过ssh在命令行上运行。

奇怪的是,我有两台服务器正在运行同一件事。一种是磁盘使用率是50%,另一种是99%。我找不到造成这种情况的原因。
所以我很困惑,它说98%与du一起使用,但是当我运行gt5应用程序时,我得到了:grab.by/9Vv2

#1 楼

如果只需要查找大文件,则可以将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的“相关软件包”部分中,我找到了ncdu。从其包装说明中可以看出:Ncdu是基于ncurses的du查看器。它通过著名的du实用程序提供了一个快速且易于使用的界面。它允许通过ncurses库浏览目录并显示磁盘使用百分比。




评论


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

–卢卡斯(Lukas Liesis)
17-3-22在21:28



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

–虽然-E
17年9月20日在16:38

如果ncdu被指出更强大,我将不胜感激。我偶尔需要它,我不记得这个名字了。

–马丁·托马
18年9月12日在12:53

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

– Mr Coder
19年2月12日在6:58

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

– Lekensteyn
19年9月1日在15:35

#2 楼

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

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


du参数:



-a用于“所有”文件和目录。仅将其保留为目录

-BM以兆字节(M)块大小(B)输出大小(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


#3 楼

我只是结合使用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将所有错误消息重定向到遗忘中。如果他们不打扰您,则不是必须的。

评论


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

–杰米
16-4-27的16:14

#4 楼

要(以递归方式)显示当前文件夹中最大的前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'


#5 楼

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

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

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

评论


确认这要快得多

– Cookie
2014年9月8日在16:45

#6 楼

这似乎是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)。

#7 楼

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

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


#8 楼

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

sudo ncdu /


评论


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

– janoside
19年9月11日下午0:52

#9 楼

试用Baobab,它可以为您提供文件和文件夹的图形概述,您可以查看真实的空间猪,然后一键删除它们。
https://help.ubuntu.com/community/Baobab

评论


在这个特定问题中,OP首选命令行方法。请参阅对该问题的评论。我也会编辑问题。

–user25656
13年1月29日在12:10

惊人的实用程序,如果您可以访问GUI

–NeverMine17
20年8月13日在16:02

#10 楼

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

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


您也可以通过du的--except选项来欣赏。

#11 楼

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

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


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

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

#12 楼

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

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


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

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


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

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


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

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


使用ls

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

ls -lSh /bin | head -5


例如,您还可以使用磁盘使用分析器或“宝宝”,例如此处所示。