You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux du命令显示目录大小有误?查看目录磁盘占用的最佳方法

目录大小统计结果差异及解决方案

你观察到的统计偏差核心来自两种统计口径的本质区别:

  • 自行递归累加得到的是所有文件的逻辑内容总大小,仅统计文件内有效数据的字节数
  • du -sh返回的是目录整体在磁盘上的实际占用空间,包含磁盘块预留空间、目录元数据等额外占用

你当前场景中2个小文件总内容大小为864B,得到12KB的du结果是典型的磁盘块分配导致的:
主流Linux文件系统默认块大小为4KB,哪怕文件内容不足4KB,也会占用完整的1个块空间;同时目录本身作为特殊文件,存储文件列表、权限等元数据也需要占用1个4KB块。2个文件各占4KB+目录占4KB,总和刚好为12KB,和你的测试结果完全吻合。

其他可能导致统计偏差的原因

  • 稀疏文件:存在空洞的稀疏文件逻辑大小远大于实际占用的磁盘空间,此时du结果会远小于逻辑大小累加值
  • 隐藏文件:递归统计时如果过滤了.开头的隐藏文件/目录,会漏算对应空间
  • 硬链接:多个硬链接指向同一个数据块时,du默认只会统计一次,递归累加如果重复计数硬链接会导致结果偏大

不同统计需求的实现方案

需求1:统计文件有效内容总大小(和你累加的864B结果一致)

  • Python实现:递归遍历目录下所有普通文件,累加os.stat(文件路径).st_size即可
  • Linux命令实现:
    find 目标目录路径 -type f -exec ls -l {} \; | awk '{sum += $5} END {print sum " Bytes"}'
    也可以直接给du加参数获取对应结果:du -sb 目标目录路径

需求2:统计磁盘实际占用总大小(和du -sh结果一致)

  • Python实现:遍历目录下所有文件、子目录,累加os.stat(路径).st_blocks * 512即可(st_blocks的单位为512字节)
  • Linux命令实现:直接使用默认du命令:du -sh 目标目录路径

内容的提问来源于stack exchange,提问作者KZiovas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 16:27:03