八成是残留临时文件在“隐身占位”,需重点查 /tmp 和 /var/tmp 下堆积的旧文件、用户级回收站(如 ~/.local/share/Trash)、被进程 hold 住的已删文件(sudo lsof +L1)。

df 显示空间已满,但 du -sh / 算不出对应大目录——八成是残留临时文件在“隐身占位”,得从三个地方重点查。
查 /tmp 和 /var/tmp 下堆积的旧文件
这两个目录是系统和服务默认的临时落脚点,很多程序写完不清理,尤其 cron 任务、崩溃进程、未完成的上传缓存容易留“尾巴”。
-
du -sh /tmp /var/tmp先看总量;如果明显偏大(比如几百 MB 以上),再进目录细筛 -
find /tmp -type f -mtime +7 -ls找 7 天前创建且未访问的普通文件(-mtime +7表示修改时间早于 7 天) -
find /tmp -type d -empty -delete清空真正空的子目录(注意:加-delete前先去掉它,用-print预览) - 别直接
rm -rf /tmp/*:有些服务(如 systemd-tmpfiles、nginx cache)依赖特定子目录结构,删光可能触发重启失败
查用户级回收站(.Trash / .local/share/Trash)
GNOME/KDE 桌面环境删除文件时默认移入用户私有回收站,路径藏在 ~/.local/share/Trash,du 不加 -a 或没进家目录就扫不到。
-
du -sh /home/*/.local/share/Trash批量检查所有用户回收站(需要 root 权限) - 单个用户查:
du -sh ~/.local/share/Trash/{files,expunged}——files是待恢复文件,expunged是已标记删除但未物理擦除的(某些桌面环境有) - 清空前确认:
ls -l ~/.local/share/Trash/files | head -5看是不是真有大文件,避免误删未同步的文档 - 桌面环境不同,路径可能为
~/.Trash(旧 KDE)或~/.local/share/Trash-1000(多用户 UID 后缀),不能只认死理
查被进程 hold 住的已删文件(unlinked but open)
这是最隐蔽的“残留”:文件 rm 了,但某个进程还开着它的 fd,磁盘块不释放,du 扫不到路径,df 却照算不误。
- 首选命令:
sudo lsof +L1—— 直接列出 link count 为 0 的打开文件,NAME 列带(deleted)后缀 - 若系统
lsof版本太老(如 RHEL6),改用:sudo lsof | awk '$NF ~ /\(deleted\)$/ {print}' - 重点关注 PID 对应的进程:
ps -o pid,comm,user,etime -p <pid></pid>看存活时间和命令名;systemctl status <service></service>查是否是系统服务 - 不要一见
java或nginx就kill:日志轮转(logrotate)配了copytruncate时,就是靠这个机制续命,杀进程反而导致日志丢失
真正难处理的不是“找不到”,而是“不敢动”——临时文件可能正被某个后台任务读写,回收站里混着未备份的草稿,(deleted) 文件背后连着关键服务。动手前务必用 lsof -p <pid></pid> -n 确认 fd 内容,用 du -sh /proc/<pid>/fd/</pid> 粗略估算占用大小,否则删完空间不释放,问题更难定位。


















