#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 楼
我只是结合使用du
和sort
。 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
例如,您还可以使用磁盘使用分析器或“宝宝”,例如此处所示。
评论
图形化的东西会好吗?不,通过ssh在命令行上运行。
奇怪的是,我有两台服务器正在运行同一件事。一种是磁盘使用率是50%,另一种是99%。我找不到造成这种情况的原因。
所以我很困惑,它说98%与du一起使用,但是当我运行gt5应用程序时,我得到了:grab.by/9Vv2