linux下按文件大小排序

日常维护中经常遇到磁盘空间告警的问题需要查看具体是那一个或多个文件占用的空间过大,再根据具体情况决定是否需要转移或删除。当然该问题可以通过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 />

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注