用du --max-depth定位深层垃圾目录需层层收缩:先以--max-depth=1锁定重灾区(如/var、/home),再对目标目录用--max-depth=2结合grep过滤G级项或-du -sh汇总,优先排查/var/log、/var/cache、/var/lib/docker,排除/proc等虚拟路径后验证再清理。

用 du --max-depth 快速定位深层垃圾目录,核心不是“钻得越深越好”,而是“层层收缩、逐级下探”。磁盘告警时,你真正需要的是一条可操作的排查路径:先锁大区,再压深度,最后聚焦可疑子树——避免在无关目录里空跑。
第一步:从挂载点开始,用 --max-depth=1 锁定“重灾区”
别直接扫整个 /。先用 df -h 看哪个分区爆了(比如 /dev/sda1 挂在 /,使用率 96%),然后立刻进该挂载点执行:
sudo du -h --max-depth=1 / | sort -hr | head -10- 这会列出根下前 10 大一级目录,如
/var占 42G、/home占 38G —— 这就是第一层靶心 - 注意加
sudo,否则像/root、/var/log这类目录会被跳过,结果失真
第二步:对重灾区加深度,但只限 2~3 层,避免信息爆炸
假设 /var 是最大头,下一步不是 --max-depth=5,而是精准控制:
-
sudo du -h --max-depth=2 /var | grep -E '^[0-9.]+[G]' | sort -hr—— 只看含 G 的二级目录,过滤掉大量小项 -
sudo du -sh /var/* | sort -hr | head -5—— 更快,只汇总每个直接子目录总大小(-s关键) - 常见高危路径优先查:
/var/log(日志滚雪球)、/var/cache(包管理缓存)、/var/lib/docker(容器镜像/层堆积)
第三步:排除干扰,让结果更干净
虚拟文件系统(/proc、/sys、/dev)不能统计,还会报错干扰排序。加上 --exclude:
sudo du -h --max-depth=2 --exclude='/proc' --exclude='/sys' --exclude='/dev' /var | sort -hr | head -15- 想跳过用户缓存?加
--exclude='.cache';怀疑 Docker?加--exclude='overlay2' - 隐藏目录(如
.docker)默认会被包含,若明确要排除,写--exclude='.?*'
第四步:确认再动手,别急着删
找到疑似垃圾目录后,别直接 rm -rf。先验证它是否还在被使用、内容是否可删:
- 看最近修改:
ls -lt /var/log/nginx/ | head - 查是否被进程占用:
lsof +D /var/log/journal - 看日志轮转状态:
logrotate -d /etc/logrotate.d/rsyslog - 临时清空建议用
truncate -s 0 *.log或journalctl --vacuum-size=200M,比删更安全











