du统计磁盘实际占用块,ls -l显示逻辑字节数;因文件系统以块(如4KB)为单位分配空间,小文件或稀疏文件等导致二者差异显著,故排查磁盘压力必须用du。

直接用 du -sh --max-depth=1 就能准确统计当前目录下各子目录的实际磁盘占用大小,这是最常用也最可靠的方法。
为什么必须用 du,不能用 ls
ls -l 显示的是文件的逻辑大小(字节数),而真实占用看的是文件系统分配的块。比如一个 1KB 的小文件,在 4KB 块大小的文件系统上仍占 4KB 空间;大量日志或缓存文件往往逻辑小、实际占块多。du 统计的是这些已分配块的总和,反映真实磁盘压力。
基础命令:查一级子目录大小
进入目标目录后执行:
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
du -sh --max-depth=1 * —— 显示所有非隐藏子目录的大小,按字母序排列
du -sh --max-depth=1 ./*/ —— 更严谨,只匹配带斜杠的目录路径,跳过普通文件
du -sh --max-depth=1 2>/dev/null | sort -hr —— 加错误过滤并按体积从大到小排序,一眼看出大户
进阶控制:排除干扰、限定范围
常见干扰项如 node_modules、.git、/proc 等会拖慢速度或污染结果:
- 跳过指定目录:
du -sh --max-depth=1 --exclude="node_modules" --exclude=".git" */ 2>/dev/null | sort -hr - 只看大于 100MB 的子目录:
du -sh --max-depth=1 */ 2>/dev/null | awk '$1 ~ /[MG]$/ && substr($1,1,length($1)-1)+0 > 100 {print}' | sort -hr - 限制权限问题影响:
sudo du -sh --max-depth=1 /var/* 2>/dev/null | sort -hr
确认结果是否可信的小技巧
如果某子目录显示异常大,但进去后发现内容不多,可能是以下原因:
- 含大量硬链接——
du默认去重,是正确行为 - 存在稀疏文件(如虚拟机镜像)——
du统计的是实际块,不是ls的“表观大小” - 目录里有被删除但进程仍在写入的文件(lsof + deleted)——这类空间不会在目录内体现,但已计入文件系统,需用
lsof +L1检查

















