日常维护中经常遇到磁盘空间告警的问题需要查看具体是那一个或多个文件占用的空间过大,再根据具体情况决定是否需要转移或删除。当然该问题可以通过find指令找出所有超出某大小的所有文件。除了find ,我们还可以使用ls、sort等常用命令快速便捷的确认具体是哪些文件占用光了磁盘。
一、ls查看占用最大的文件
1、S(大写)命令可以按文件从大到小排列(以byte为单位显示的)
# ls -lS total 32772 -rw-r--r-- 1 root root 18877051 Dec 6 20:32 cms.sql -rw-r--r-- 1 root root 7558809 Dec 25 22:21 blog91it.sql -rw-r--r-- 1 root root 5053697 Dec 6 20:32 cms.tar.gz -rw-r--r-- 1 root root 1977747 Dec 25 22:21 blog91it.tar.gz -rw-r--r-- 1 root root 23276 Dec 1 00:33 a.py -rw-r--r-- 1 root root 12049 Dec 18 23:09 spir.tar.gz -rw-r--r-- 1 root root 7497 Nov 5 01:23 new.py -rw-r--r-- 1 root root 5326 Dec 21 19:25 segment.tar.gz drwxr-xr-x 4 root root 4096 Dec 19 00:38 py drwxr-xr-x 2 root root 4096 Nov 22 23:30 qiniu drwxr-xr-x 2 root root 4096 Dec 21 19:24 segment -rw-r--r-- 1 root root 1372 Jan 5 21:04 pid.py -rw-r--r-- 1 root root 499 Jan 7 21:51 cm.sh -rw-r--r-- 1 root root 285 Jan 5 21:29 vms.py -rw-r--r-- 1 root root 261 Jan 6 00:12 grep.py -rwxr-xr-x 1 root root 113 Jan 5 23:23 vmrss.sh
<br />
2、加上r参数可以反向排序(由小到大)
# ls -lSr total 32772 -rwxr-xr-x 1 root root 113 Jan 5 23:23 vmrss.sh -rw-r--r-- 1 root root 261 Jan 6 00:12 grep.py -rw-r--r-- 1 root root 285 Jan 5 21:29 vms.py -rw-r--r-- 1 root root 499 Jan 7 21:51 cm.sh -rw-r--r-- 1 root root 1372 Jan 5 21:04 pid.py drwxr-xr-x 2 root root 4096 Dec 21 19:24 segment drwxr-xr-x 2 root root 4096 Nov 22 23:30 qiniu drwxr-xr-x 4 root root 4096 Dec 19 00:38 py -rw-r--r-- 1 root root 5326 Dec 21 19:25 segment.tar.gz -rw-r--r-- 1 root root 7497 Nov 5 01:23 new.py -rw-r--r-- 1 root root 12049 Dec 18 23:09 spir.tar.gz -rw-r--r-- 1 root root 23276 Dec 1 00:33 a.py -rw-r--r-- 1 root root 1977747 Dec 25 22:21 blog91it.tar.gz -rw-r--r-- 1 root root 5053697 Dec 6 20:32 cms.tar.gz -rw-r--r-- 1 root root 7558809 Dec 25 22:21 blog91it.sql -rw-r--r-- 1 root root 18877051 Dec 6 20:32 cms.sql
<br />
3、加上h参数以更友好的方式显示
# ls -lhS total 33M -rw-r--r-- 1 root root 19M Dec 6 20:32 cms.sql -rw-r--r-- 1 root root 7.3M Dec 25 22:21 blog91it.sql -rw-r--r-- 1 root root 4.9M Dec 6 20:32 cms.tar.gz -rw-r--r-- 1 root root 1.9M Dec 25 22:21 blog91it.tar.gz -rw-r--r-- 1 root root 23K Dec 1 00:33 a.py -rw-r--r-- 1 root root 12K Dec 18 23:09 spir.tar.gz -rw-r--r-- 1 root root 7.4K Nov 5 01:23 new.py -rw-r--r-- 1 root root 5.3K Dec 21 19:25 segment.tar.gz drwxr-xr-x 4 root root 4.0K Dec 19 00:38 py drwxr-xr-x 2 root root 4.0K Nov 22 23:30 qiniu drwxr-xr-x 2 root root 4.0K Dec 21 19:24 segment -rw-r--r-- 1 root root 1.4K Jan 5 21:04 pid.py -rw-r--r-- 1 root root 499 Jan 7 21:51 cm.sh -rw-r--r-- 1 root root 285 Jan 5 21:29 vms.py -rw-r--r-- 1 root root 261 Jan 6 00:12 grep.py -rwxr-xr-x 1 root root 113 Jan 5 23:23 vmrss.sh
<br />
不过上面的排序,如果仔细观察的话会发现一个问题,就是所有目录显示的大小都是4K (linux默认pagesize的大小 )。如果我们想将目录也算上就要使用du配合sort进行排序了。
二、du和sort排序
1、sort的-h参数
#当du不加-sh参数时py目录未当做一个整体进行排序,而是将其下的目录也进行了排序 # du * |sort -h 4 cm.sh 4 grep.py 4 pid.py 4 vmrss.sh 4 vms.py 8 new.py 8 segment.tar.gz 12 spir.tar.gz 24 a.py 28 segment 60 py/moudle 68 py/python/pycurl 84 py/python 184 py 1932 blog91it.tar.gz 4936 cms.tar.gz 7384 blog91it.sql 18436 cms.sql 43412 qiniu #加上参数后,可以看到目录都被当做一个整体处理了 # du * -sh|sort -h 4.0K cm.sh 4.0K grep.py 4.0K pid.py 4.0K vmrss.sh 4.0K vms.py 8.0K new.py 8.0K segment.tar.gz 12K spir.tar.gz 24K a.py 28K segment 184K py 1.9M blog91it.tar.gz 4.9M cms.tar.gz 7.3M blog91it.sql 19M cms.sql 43M qiniu
<br />
2、sort -g参数
# du * |sort -g (效果和du *|sort -h一样) 4 cm.sh 4 grep.py 4 pid.py 4 vmrss.sh 4 vms.py 8 new.py 8 segment.tar.gz 12 spir.tar.gz 24 a.py 28 segment 60 py/moudle 68 py/python/pycurl 84 py/python 184 py 1932 blog91it.tar.gz 4936 cms.tar.gz 7384 blog91it.sql 18436 cms.sql 43412 qiniu 这里du使用-sh参数后,结果确不按大小进行排序了 # du * -sh|sort -g 1.9M blog91it.tar.gz 4.0K cm.sh 4.0K grep.py 4.0K pid.py 4.0K vmrss.sh 4.0K vms.py 4.9M cms.tar.gz 7.3M blog91it.sql 8.0K new.py 8.0K segment.tar.gz 12K spir.tar.gz 19M cms.sql 24K a.py 28K segment 43M qiniu 184K py
<br />
3、sort -h与-g参数的区别
-h参数是GNU coreutils >= 7.5以后新增的参数,-h会以K、M、G这种大小的顺序进行人类便于识别的顺序进行排序。不过在一些老的linux发行版里,sort里可能没有这个参数。这个时候就需要使用-g参数。而du * -sh|sort -h与du * -s|sort -g 的排序效果是相同的。两个参数的具体区别如下:
-h, --human-numeric-sort compare human readable numbers (e.g., 2K 1G) -g, --general-numeric-sort compare according to general numerical value
<br />