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 afilels -lh 查看到的文件大小为120M,即dd命令先创建了80M的空洞,再写入了40M的内容