在 Linux/UNIX/BSD 中如何查找前 10 大文件和目录

我们怎么样在像 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

将输出:

这里写图片描述

译文出处:

http://www.cyberciti.biz/faq/how-do-i-find-the-largest-filesdirectories-on-a-linuxunixbsd-filesystem/

posted @ 2016-06-24 13:00  chenqiangzhishen  阅读(429)  评论(0编辑  收藏  举报