du
查看的是文件的真实占用大小,而ls
显示的是文件从开始到结尾记录的大小
使用dd
命令进行测试:
dd if=/dev/zero bs=4M count=10 of=afile
if 表示输入文件,/dev/zero 输出全0
bs 表示block size,每次拷贝的文件大小,从/dev/zero每次拷贝4M内容,写入afile
count 表示写入多少次,这里将每次读区4M,读取10次,写入afile
>10+0 records in
>10+0 records out
>41943040 bytes (42 MB) copied, 0.0481747 s, 871 MB/s
分别用两个命令查看文件占用大小
du -h afile
>40M afile
ls -lh afile
>-rw-r--r-- 1 root root 40M May 18 21:59 afile
创建空洞文件
dd if=/dev/zero bs=4M count=10 seek=20 of=afile
seek 表示跳过20个block,即创建80M的空洞文件
>10+0 records in
>10+0 records out
>41943040 bytes (42 MB) copied, 0.0483538 s, 867 MB/s
分别用两个命令查看文件占用大小
du -h afile
>40M afile
ls -lh afile
>-rw-r--r-- 1 root root 120M May 18 22:03 afile
ls -lh
查看到的文件大小为120M,即dd
命令先创建了80M的空洞,再写入了40M的内容