磁盘空间是一种有限资源。我们经常要统计存储介质(例如硬盘)的使用情况,以便确定可用空间。当可用空间开始捉襟见肘时,我们就得找到大体积的文件,删除或移走它们,以便腾出空间。
df和du是Linux中用于统计磁盘使用情况的两个重要命令。df是disk free 的缩写,du是disk usage的缩写。
df
df命令可以展示任何“mounted”文件系统(系统中所有已挂载的分区)的磁盘利用率。该命令可以用不同的方式调用。默认情况下,df命令用1K为块来展示磁盘空间,这看起来不是很直观。“-h”参数使df用更可读的方式打印磁盘空间(例如 100K,200M,3G)。
[NSOS1.1 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda1 4061540 1423036 2428860 37% /
none 10237276 55484 10181792 1% /dev/shm
/dev/sda2 9297812 152816 8672688 2% /icg/conf
/dev/sda3 463080324 83057104 356500044 19% /icg/data
[NSOS1.1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 3.9G 1.4G 2.4G 37% /
none 9.8G 55M 9.8G 1% /dev/shm
/dev/sda2 8.9G 150M 8.3G 2% /icg/conf
/dev/sda3 442G 80G 340G 19% /icg/data
[NSOS1.1 ~]#
du
找出某个文件(或多个文件)、目录占用的磁盘空间。
如下一个目录文件结构
[root@localhostdutest]# tree
.
├──redis.tar.gz
├──rest-assurd
│ ├──nulldir
│ │ └──null.txt
│ └──rest-assured-4.0.0-deps.zip
└──Test.java
2directories, 4 files
我们可以很方便地使用du查看该目录结构占用的磁盘空间,如
[root@localhostdutest]# du
4 ./rest-assurd/nulldir
11752 ./rest-assurd
13728 .
统计结果默认以KB作为计量单位。从结果上看,它会递归地遍历当前路径下每一个存在的子目录,但不显示每个具体文件占用空间的情况。
可以指定文件或目录显示其占用空间大小,如
[root@localhostdutest]# du rest-assurd
4 rest-assurd/nulldir
11752 rest-assurd/
[root@localhostdutest]# du Test.java
4 Test.java
[root@localhostdutest]# du Test.java redis.tar.gz #同时查看多个文件
4 Test.java
1968 redis.tar.gz
使用其他一些参数,可以获取更详细的信息,如
-h
命令du默认显示文件大小不带单位,但是以标准单位KB、MB或GB显示磁盘使用情况更方便人们阅读。要采用这种更友好的格式进行打印,可以使用选项 -h。如
[root@localhostdutest]# du -h Test.java redis.tar.gz
4.0K Test.java
2.0M redis.tar.gz
-c
-c (count)可以输出作为命令参数的所有文件和目录的磁盘使用情况,它会在输出结果末尾加上一行总计。
1972 total
[root@localhostdutest]# du -hc Test.java redis.tar.gz
4.0K Test.java
2.0M redis.tar.gz
2.0M total
-s
-s(summarize,合计)则只输出合计数据。它可以配合 -h 打印出人们易读的格式。
[root@localhostdutest]# du -sh rest-assurd
12M rest-assurd/
[root@localhostdutest]# du -sh .
14M .
可见,-s得到输出不会显示指定目录下各级子目录的大小。
-a(--all)
要获得某个目录中所有文件(即递归显示每个文件包括目录)的磁盘使用情况,并在每一行中显示各个文件的磁盘占用详情。
[root@localhostdutest]# du -ah rest-assurd/
0 rest-assurd/nulldir/null.txt
4.0K rest-assurd/nulldir
12M rest-assurd/rest-assured-4.0.0-deps.zip
12M rest-assurd/
--exclude
从磁盘使用统计中排除部分文件,有两种方法,
使用通配符,
[root@localhostdutest]# du -sh --exclude "*.gz" .
12M .
[root@localhostdutest]# du -sh .
14M .
使用列表
$ du--exclude-from EXCLUDE.txt DIRECTORY # EXCLUDE.txt包含了需要排除的文件列表
--max-depth
指定递归深度,如
[root@localhostdutest]# du -h rest-assurd --max-depth=0
12M rest-assurd
[root@localhostdutest]# du -h rest-assurd --max-depth=1
4.0K rest-assurd/nulldir
12M rest-assurd
排序
使用管道,将输出结果传给sort,即可,如
[root@localhostdutest]# du -h . | sort -nrk 1 #按照第一列倒序(即按照大小从大到小)
14M .
12M ./rest-assurd
4.0K ./rest-assurd/nulldir
或使用find先过滤,如
$ find. -type f -exec du -k {} \; | sort -nrk 1 | head
利用find替du将文件过滤出来,而无需使用du进行递归遍历。