我们怎么样在像 Linux 或者 Unix 这样的类似系统中查找前 10 大文件和目录?
通常我们有必要需要知道哪些文件或者目录正在吞噬着磁盘空间。更进一步来说,就是需要在文件系统中的特定目录如 /tmp, /var 或者 /home 下查找。这篇文章将帮助我们在文件系统中查找最大的文件或目录。
这里没有简单的命令让我们在 Linux/UNIX/BSD 文件系统中找到最大的文件/目录。但我们可以通过如下的四个命令组合使用来实现:
- du 命令:估计磁盘空间使用量
- sort 命令:排序
- head 命令:取前几条输出
- find 命令:查找文件
在控制台输入如下命令找出是大的 10 个文件和目录:
du -a /var -h | sort -n -r | head -n 10
输出示例:
1008372 /var
313236 /var/www
253964 /var/log
192544 /var/lib
152628 /var/spool
152508 /var/spool/squid
136524 /var/spool/squid/00
95736 /var/log/mrtg.log
74688 /var/log/squid
62544 /var/cache
如果要更可读,则可以如下:
$ cd /path/to/some/where
$ du -hsx * | sort -rh | head -10
这里,
- du -h : 以人可读的格式显示 (eg. 1K, 234M, 2G)
- du -s : 显示每个参数的总数。 (summary)
- du -x : 排除目录
- sort -r : 逆序 (reverse)
- sort -h : human readable
- head -10 或者 head -n 10 : 显示前 10 条。
以上命令仅在安装了 GNU/sort 后可用,其他的 类 UNIX 系统需要用如下的版本:
for i in G M K; do du -ah | grep [0-9]$i | sort -nr -k 1; done | head -n 11
示例输出:
179M .
84M ./uploads
57M ./images
51M ./images/faq
49M ./images/faq/2013
48M ./uploads/cms
37M ./videos/faq/2013/12
37M ./videos/faq/2013
37M ./videos/faq
37M ./videos
36M ./uploads/faq
用如下的命令找出某个目录和其子目录下最大的文件:
## Warning: only works with GNU find ##
find /path/to/dir/ -printf '%s %p\n'| sort -nr | head -10
find . -printf '%s %p\n'| sort -nr | head -10
示例输出:
5700875 ./images/faq/2013/11/iftop-outputs.gif
5459671 ./videos/faq/2013/12/glances/glances.webm
5091119 ./videos/faq/2013/12/glances/glances.ogv
4706278 ./images/faq/2013/09/cyberciti.biz.linux.wallpapers_r0x1.tar.gz
3911341 ./videos/faq/2013/12/vim-exit/vim-exit.ogv
3640181 ./videos/faq/2013/12/python-subprocess/python-subprocess.webm
3571712 ./images/faq/2013/12/glances-demo-large.gif
3222684 ./videos/faq/2013/12/vim-exit/vim-exit.mp4
3198164 ./videos/faq/2013/12/python-subprocess/python-subprocess.ogv
3056537 ./images/faq/2013/08/debian-as-parent-distribution.png.bak
我们可以跳过目录,仅显示文件,输入:
find /path/to/search/ -type f -printf '%s %p\n'| sort -nr | head -10
或者
find /path/to/search/ -type f -iname "*.mp4" -printf '%s %p\n'| sort -nr | head -10
我们也可以用鸭子来猎取磁盘空间这头猪:
采用 alias
alias ducks='du -cks * | sort -rn | head'
运行如下命令来获取最大的 10 个文件或目录:
$ ducks
将输出:
译文出处: