du和ls显示文件大小不同的原因
du -sh ./*
功能:
du(disk usage)显示文件和目录占用的磁盘空间。
-s(summary)选项汇总显示每个文件和目录的总大小。
-h(human-readable)选项以人类可读的格式显示大小。
显示内容:
du 显示的是文件或目录实际占用的磁盘空间,包括所有子文件和子目录。
对于目录,它会递归计算所有内容的大小。
ls -lah
功能:
ls(list)显示目录内容列表。
-l(long listing format)选项显示详细信息。
-a(all)选项显示所有文件,包括隐藏文件。
-h(human-readable)选项以人类可读的格式显示文件大小。
显示内容:
ls 显示的是文件的逻辑大小,即文件内容的实际大小。
对于目录,ls 仅显示目录本身的大小(通常是4K或一个固定值),不包括目录内文件的大小。
主要区别和原因
文件大小计算方式:
du 显示的是文件和目录实际占用的磁盘空间,考虑了文件碎片和文件系统的块大小。
ls 显示的是文件的逻辑大小,即文件内容的实际字节数。
目录大小:
du 对于目录会递归计算其所有子文件和子目录的总大小。
ls 仅显示目录本身的大小,不包括其内容的大小。
稀疏文件:
对于稀疏文件(实际占用的磁盘空间小于文件逻辑大小),du 会显示实际占用的磁盘空间。
ls 会显示文件的逻辑大小。
什么是稀疏文件
稀疏文件(sparse file)是一种特殊类型的文件,它在存储时会跳过包含全零数据块的部分,从而减少实际占用的磁盘空间。这种技术通常用于保存包含大量连续零数据块的大型文件,以提高存储效率。
举例说明
假设有一个大小为1GB的文件,其中只有前100MB和最后100MB有实际数据,中间的800MB全是零数据。
逻辑大小:1GB
物理大小:200MB(前100MB + 最后100MB)
这种情况下,使用稀疏文件技术,可以将物理存储空间减少到200MB,而不是实际的1GB。
什么是零数据
零数据(Zero Data)是指文件或数据块中全部由零(0)组成的数据。零数据块在存储和传输时通常不包含有用的信息,因而在某些情况下可以进行特殊处理,以提高存储和传输效率。
零数据的特性
内容全为零:零数据块中的每个字节都为0。
没有实际信息:由于其内容全为零,零数据块不包含任何有用的信息。
以下是一个零数据文件的示例