为何du命令获取的文件大小小于ls命令的结果?
为什么
du显示的文件大小比ls小? 先看你执行的命令输出:
$ du -h core.app.1665679445 2.0M core.app.1665679445 $ ls -lah core.app.1665679445 -rw------- 1 262899 10000 31M Oct 13 16:44 core.app.1665679445
核心原因:这是一个稀疏文件(Sparse File)
你之前的理解有误——du的结果并非始终大于ls,两者的含义本质不同:
ls -lah显示的是文件的逻辑大小:即文件内容理论上的总字节数(这里的31M),不管这些字节是否真的占用了磁盘空间。du -h显示的是文件实际占用的磁盘存储空间:也就是操作系统为这个文件分配的磁盘块总大小(这里的2.0M)。
core文件很容易成为稀疏文件:程序崩溃生成core dump时,只会写入进程实际使用过的内存页,那些未被使用的内存区域对应的文件部分,系统不会为其分配实际磁盘块,只是标记为空块。当你读取这些空块时,系统会自动返回全0,但这些块并没有真正占用磁盘空间,因此实际占用的磁盘大小(du结果)远小于逻辑大小(ls结果)。
验证方法
你可以用以下命令确认这是稀疏文件:
# 查看文件占用的磁盘块数(默认单位为4KB块) ls -s core.app.1665679445 # 直接检查文件类型,稀疏文件会被标注 file core.app.1665679445
内容的提问来源于stack exchange,提问作者aviola
相关产品推荐
相关产品推荐

