原则:少量、分步、局部化扫描 → 定位大目录 → 只在该目录内部继续扫描并清理。避免一次性
find / -size ...或全盘du
1. 先确认盘满与目标分区
df -h /
看 /(或实际系统盘)是否 100%。若是,进入下一步。

2. 在根目录只查看第一层子项大小
推荐命令(单位 MB,快速):
cd /
du -s -BM /* 2>/dev/null | sort -nr | head -n 20
解释:
du -s -BM /*只统计根目录下每个第一层项的总大小(不递归所有子层),开销小。sort -nr | head -n 20取前 20 个最大项,便于快速定位大头。
注意:不要运行 du -xh / | sort -h 或全盘 find(这些会遍历大量小文件,压力大、耗时长)。
3. 针对最大项逐层钻取(人工递进)
假设上一步看到 /var 最大,进入 /var 再查看第一层:
cd /var
du -s -BM ./* 2>/dev/null | sort -nr | head -n 20
如果是 /var/log 最大,进入 /var/log:
cd /var/log
du -s -BM ./* 2>/dev/null | sort -nr | head -n 20
重复“进入 -> 只看第一层 -> 进入最大项”步骤,直到定位到某个大文件或少数几个大文件夹为止。
4. 快速、安全地释放空间(优先清空而不是删除)
找到大文件后,推荐先清空内容(保留文件路径和权限),例如日志:
# 清空单个文件(变为 0 字节)
> big.log
# 或使用 truncate
truncate -s 0 big.log
如果是一堆日志文件:
# 在目标目录下清空所有 .log(谨慎测试后使用)
for f in *.log; do : > "$f"; done
清空优点:对正在写日志的服务安全,不产生“幽灵文件”问题;比 rm 更稳妥。
如必须删除临时文件:
rm -f large_tmp_file
# 或删除目录(非常小心)
rm -rf somedir_to_remove
提醒:不要随意 rm -rf /var 之类全局删除,先确认路径是业务无关或可重建的临时文件。
5. 检查删除后空间 & 释放句柄问题
检查空间:
df -h /
如果空间没有回升,可能是进程仍在写被删除的文件(幽灵文件)。查看占用已删除文件的进程(如果 lsof 可用):
lsof -nP +L1 2>/dev/null
该命令会列出已删除但仍被进程打开的文件。若确实是这种情况,最好重启对应服务或进程以释放空间(谨慎):
systemctl restart service-name
# 或 kill -HUP pid
如果
lsof不可用,可重启关键服务或整机(若业务允许)以释放空间。
6. 紧急流程速查(一行版动作指南)
df -h /→ 确认满盘du -s -BM /* 2>/dev/null | sort -nr | head→ 找到大头目录cd /that/dir && du -s -BM ./* 2>/dev/null | sort -nr | head→ 递进定位- 找到大文件:
> file或truncate -s 0 file(首选) df -h /→ 验证空间恢复- 如空间没释放:
lsof -nP +L1→ 重启持有进程
注意事项(必须读)
- 在生产环境不要盲目删除不熟悉的文件。
- 优先清空日志而非删除已被程序使用的文件。
- 在无法判断是否安全删除时,先复制或移动到别处(如果有空间或挂载远程盘)再删除。
- 若你没有足够权限或不确定影响,请联系运维/同事协助。
