磁盘空间告急时应先用df -h定位高占用分区,再用du和find逐层排查大目录与大文件,注意已删除但未释放句柄的文件需用lsof +l1识别,最后安全清理/tmp、/var/log、包缓存及旧内核。

磁盘空间告急时,关键不是盲目删文件,而是快速定位真正占地方的“大户”。先看清哪块盘满了,再一层层往下挖,避免误删系统文件或正在被进程使用的文件。
看哪块盘快满了
用 df -h 查整体使用情况,重点关注 Use% 接近 90% 或 100% 的挂载点,比如 /、/home、/var。如果某一分区显示 100%,但 du 统计总和远小于此,很可能是已删除但未释放句柄的大文件,需要进一步排查。
从根目录往下找“大块头”
进入高占用分区的根目录(如 cd /),运行:
- du -sh * | sort -hr | head -10:列出当前层最大的 10 个目录
- du -sh /var/* | sort -hr | head -10:直接查 /var 下各子目录大小(日志、缓存常在这里)
- find /var/log -type f -size +100M -ls:在日志目录里找大于 100MB 的普通文件
别漏掉“看不见”的大文件
有些文件已被 rm 删除,但仍有进程在写它,空间不会立刻释放。用下面命令揪出它们:
- lsof +L1:列出所有链接数为 0(即已删但未释放)的打开文件
- lsof -nP | grep ‘deleted’ | grep -v ‘txt’:过滤出已删但仍被占用的常规文件,重点关注 size 列
- 找到后,可重启对应服务,或直接清空其文件描述符:echo > /proc/PID/fd/FD_NUMBER(需 root 权限且谨慎操作)
安全清理常见目标
确认是冗余内容后再动手:
- /tmp 和 /var/tmp:多数可直接清空 rm -rf /tmp/* /var/tmp/*
- /var/log:用 find /var/log -name “*.log” -mtime +30 -delete 清理 30 天前的日志;或先压缩 find /var/log -name “*.log” -mtime +7 -exec gzip {} ;
- 包管理缓存:apt-get clean(debian/ubuntu)、yum clean all(centos/RHEL)
- 旧内核:apt-get autoremove –purge(Ubuntu)或手动删 /lib/modules/旧版本号 和 /boot/vmlinuz-旧版本