标签:命令
du命令用来查看指定文件所占用或分配的磁盘空间,以磁盘的block为单位。如果参数是目录,它会显示* 该目录下所有文件占用的总空间 *,同时递归的列出各级子目录的总占用空间,但是没有非目录文件的信息。如果没有指定文件名称,默认为当前目录:
m@sys:~/program/C_codes/tools$ du
16 ./calculators
28 .
需要注意的是,这里给出的统计数值指的是该目录下所有文件加和的总量,而不是单独这个目录文件本身,上篇文章中说过,ls目录有个选项-s也可以显示文件所占用的磁盘空间大小,我们来对比一下:
m@sys:~/program/C_codes/tools$ ls -las
总用量 20
4 drwxrwxr-x 3 m m 4096 4月 24 11:24 .
4 drwxrwxr-x 5 m m 4096 5月 12 19:47 ..
4 drwxrwxr-x 2 m m 4096 5月 4 00:16 calculators
4 -rw-rw-r-- 1 m m 422 3月 12 21:24 formtrans.c
4 -rw-rw-r-- 1 m m 31 4月 7 16:18 README.md
结果对比很明显,ls -s只是把目录当成普通文件来计算其本身所占的空间;而du却是计算该目录下所有的文件占据的空间总和(包括目录文件本身)。这里需要一点linux文件与磁盘的知识,可以参考我的这篇文章。
从上面ls的结果也可以看出,Linux为每个文件分配的磁盘空间至少是4个block,不管其实际大小;而目录基本上都是4个block。
下面是各个选项:
m@sys:~/program/C_codes/tools/calculators$ du -ca
4 ./calculator.l
4 ./Makefile
4 ./calculator.y
16 .
16 总用量
可以看到,‘.’目录(当前目录)和总用量的结果一样。
m@sys:~$ sudo tune2fs -l /dev/sda1 |grep "Block size"
Block size: 4096
那么-B后面可以跟哪些参数呢?分两套标准:工业标准和计算机标准。
m@sys:~/program/C_codes/tools$ du -B 1
16384 ./calculators
28672 .
m@sys:~/program/C_codes/tools$ du -B k
16K ./calculators
28K .
m@sys:~/program/C_codes/tools$ du --apparent-size
6 ./calculators
10 .
m@sys:~/program/C_codes/tools$ du
16 ./calculators
28 .
从结果看以看出,加不加这个参数区别还是很明显的;默认以block为单位,可以加上-B 1选项以字节为单位显示,就可以与ls- l显示一样的大小:
m@sys:~$ du --apparent-size -B 1 formtrans.c
422 formtrans.c
m@sys:~$ ls -l formtrans.c
-rw-rw-r-- 1 m m 422 3月 12 21:24 formtrans.c
不过这一招对于目录文件却不管用,因为正如上面所说,对于目录,du总是计算其包含的所有文件的总和,而不是其本身:
m@sys:~/program/C_codes/tools/calculators$ ls -al
总用量 20
drwxrwxr-x 2 m m 4096 5月 4 00:16 .
drwxrwxr-x 3 m m 4096 4月 24 11:24 ..
-rw-rw-r-- 1 m m 340 4月 24 14:10 calculator.l
-rw-rw-r-- 1 m m 673 5月 4 00:16 calculator.y
-rw-rw-r-- 1 m m 367 4月 24 14:20 Makefile
m@sys:~/program/C_codes/tools/calculators$ du --apparent-size -B 1 -a .
340 ./calculator.l
367 ./Makefile
673 ./calculator.y
5476 .
我们可以对后面那个结果计算一下:5476 - 673 - 367 - 340 = 4096,正好是一个目录文件本身的实际大小,和ls -l的结果一样。
m@sys:~/program/C_codes/tools/calculators$ du -a --apparent-size -B 1
340 ./calculator.l
367 ./Makefile
673 ./calculator.y
5476 .
m@sys:~/program/C_codes/tools/calculators$ du -ab
340 ./calculator.l
367 ./Makefile
673 ./calculator.y
5476 .
m@sys:~/program/C_codes/tools/calculators$ du -a -B 1k
4 ./calculator.l
4 ./Makefile
4 ./calculator.y
16 .
m@sys:~/program/C_codes/tools/calculators$ du -a -k
4 ./calculator.l
4 ./Makefile
4 ./calculator.y
16 .
-m:和-k类似。实际上,-k和-m这类的选项在很多命令中都有出现。
-S:从总结果中减去所有子目录的大小:
m@sys:~/program/C_codes/tools$ du --apparent-size -B 1 -S .
5476 ./calculators
4549 .
m@sys:~/program/C_codes/tools$ du --apparent-size -B 1 .
5476 ./calculators
10025 .
全文完。
标签:命令
原文地址:http://blog.csdn.net/u012668018/article/details/45690853