最直接有效的方式是用 du -sh 配合 sort -rh 和 head -10,一步锁定当前目录下占用空间最大的前10个子目录;只看当前目录一级子项是排查效率最高的第一步,避免递归爆炸;加 .[!.] 包含隐藏项,加 -x 防跨文件系统,--max-depth=1 可深入一层分析,--exclude 能跳过无意义目录。

最直接有效的方式是用 du -sh * 配合 sort -rh 和 head -10,一步锁定当前目录下占用空间最大的前 10 个子目录。
只看当前目录一级子项(最快起点)
这是排查效率最高的第一步,避免递归遍历耗时和卡顿:
- du -sh * —— 列出当前目录所有非隐藏子项的总大小(不含子目录深层内容)
-
du -sh .[!.]* * —— 加上隐藏项(如
.cache、.config),注意.[!.]*能安全匹配点开头但非..的目录 -
du -shx * —— 加
-x可防止跨文件系统统计(查/或/home时强烈建议)
深入一层定位“元凶级”子目录
在已知某个大目录(如 /var/log)后,快速确认它内部谁最占空间:
-
du -h --max-depth=1 /var/log | sort -rh | head -10 —— 只统计
/var/log下的直接子目录(如nginx/、mysql/),不进更深层 - 结果中若出现
1.2G /var/log/nginx,就说明问题大概率集中在该路径下,可继续进入排查
跳过干扰项,加速分析
避免 du 卡在无意义或权限受限的位置:
- du -shx --exclude={node_modules,.git,__pycache__} * —— 一次性排除多个目录,bash 支持花括号语法
- 路径需与实际遍历路径一致:在
/home下运行就写--exclude="user/.local/share/Trash";从根查就写--exclude="/var/lib/docker" - 加
2>/dev/null屏蔽权限错误(如/proc、/sys下的拒绝访问提示)
精准筛选大目录(比如只看超过 500MB 的)
结合 grep 过滤,减少干扰信息:
- du -sh * 2>/dev/null | grep '^[0-9.]\+G\|^[0-9]\{3,\}M' | sort -rh | head -10 —— 只显示 GB 级或 ≥100MB 的目录
- 注意
sort -rh中的-h不可省略,否则999M会排在1.2G前面











