为何ls与du命令显示同一文件的大小存在差异?
为何ls与du命令显示同一文件的大小存在差异?
嗨,这个问题其实是新手接触Linux文件系统时很常见的困惑,我来给你拆解清楚:
核心原因:两个命令的计算逻辑完全不同
ls -la显示的是文件的「实际数据大小」
这个命令统计的是文件里实际存储的字节数,也就是你写入文件的内容的真实大小。从你的输出里能看到,newquota文件的实际数据量是1024字节(也就是1KB),这就是ls给出的数值。du -h显示的是文件在磁盘上「占用的物理块大小」
Linux的文件系统(比如你用的XFS)是按「块(block)」来分配磁盘空间的,每个块有固定的大小(常见的是4KB,你的系统应该就是这个配置)。哪怕你的文件内容只用到了块的一小部分,整个块也会被分配给这个文件,剩余的空间没法被其他文件利用。
你的文件只有1KB,不够填满一个4KB的块,所以磁盘还是会给它分配一整个4KB的块,这就是du显示4.0K的原因。
那文件的「实际大小」到底是哪个?
这得看你关注的角度:
- 如果是问文件里存储的内容有多少,那实际大小就是
ls显示的1024字节(1KB); - 如果是问这个文件占用了多少磁盘空间,那就是
du显示的4KB。
日常我们说“文件大小”,一般默认指的是前者,也就是文件的实际数据量。
备注:内容来源于stack exchange,提问作者Alakananda S




