正确命令是 du -sh,其中 -s 表示汇总、-h 表示人类可读;du -sh */ 只统计子目录,配合 sort -hr 可按大小倒序排列,加 --exclude 或 head -n 10 等可进一步筛选。

直接用 du -sh 就能快速得到目录总大小,这是最常用、最有效的起点。它不统计内部结构,只输出一个简洁的人类可读结果,比如 2.4G /var。
快速查看单个目录总大小
只需一条命令:
-
du -sh /path/to/dir—— 显示指定目录的总磁盘占用(如1.8G /home) -
du -sh .—— 查看当前目录总大小 -
du -sh *—— 列出当前目录下每个一级子项(不含隐藏项)的大小
定位空间大户:按大小排序找大目录
想一眼看出谁占得多,必须配合 sort 和 head:
-
du -h --max-depth=1 /var | sort -hr | head -n 11—— 查看/var下前十大的一级子目录 -
du -ah --max-depth=1 . | sort -hr | head -n 20—— 包含文件,找当前目录下最大的前 20 个对象(含隐藏文件)
注意:-hr 中的 r 表示倒序(从大到小),head -n 11 多取一行是为了包含顶部总计行。
控制统计范围和精度
避免误扫无关内容,关键靠这几个选项:
-
--max-depth=1—— 只统计当前层,不钻进子目录,输出干净 -
-x—— 跨文件系统时自动跳过(例如挂载的/mnt/usb不计入) -
--exclude='*.log'或--exclude=/var/log—— 排除日志等干扰项,聚焦真正问题目录 -
--apparent-size—— 统计“看起来多大”(逻辑大小),而非实际块占用,排查稀疏文件或压缩卷时有用
排查空间异常:du 和 df 对不上怎么办
如果 df 显示已用 95%,但 du -sh /* 加起来只有 70%,常见原因有:
- 已删除但进程仍打开的文件(
lsof +L1可查) - 隐藏在挂载点下的旧数据(卸载后
du才能扫到) - ext4/xfs 等文件系统的预留空间(root 用户默认保留 5%)
- 快照或 CoW(copy-on-write)机制导致的空间延迟释放(如 btrfs、zfs)
此时不能只信 du,要结合 lsof、mount、find /proc/*/fd -ls 进一步验证。


















