答案是:当df显示磁盘高占用而du统计总和远小时,首要排查已删除但进程未释放的“幽灵文件”,执行lsof +l1定位并重启对应服务或清空/proc/[pid]/fd/[fd]释放空间。

查大文件不能只盯着“显眼”的目录,得从磁盘告警的矛盾点切入:当 df -h 显示根分区 95% 满,但 du -sh / 统计总和却差一大截,说明空间被“看不见”的东西占了——可能是已删未释的幽灵文件、桌面回收站里的隐藏垃圾、深层缓存或容器残留。清理的关键是分层定位,先筛大方向,再缩范围,最后安全操作。
先揪出“幽灵文件”:已删但进程还占着的 deleted 文件
这类文件在目录树里消失,ls 和 du 都看不到,但 df 算它占空间。典型场景是日志被 rm -f 后服务仍在写入。
- 运行
lsof +L1,列出所有状态为deleted的打开文件 - 重点关注输出中的
PID和路径,例如/var/log/nginx/access.log (deleted) - 若对应服务可重启,直接
systemctl restart nginx,空间立刻释放 - 若不能重启,进
/proc/[PID]/fd/找对应 fd 编号(如3),执行echo > /proc/[PID]/fd/3清空内容(不删句柄,只清数据)
扫清隐藏回收站:图形界面“删除”留下的点号目录
在桌面环境中按 Delete 键,文件实际被移到 ~/.local/share/Trash/files/,这个目录以点开头,du -sh * 默认忽略,极易漏查。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 手动检查:
du -sh ~/.local/share/Trash/files/ 2>/dev/null - 确认后清空:
rm -rf ~/.local/share/Trash/files/* ~/.local/share/Trash/info/*(必须 files 和 info 成对清理) - 临时禁用回收站(如需彻底规避):在文件管理器设置中启用“永久删除”或 Shift+Delete 习惯
定位深层大目录:用 du 分级穿透,防跨挂载点误判
别一上来就 du -sh /*,有些大占用藏在多层嵌套里(如 /var/lib/docker/overlay2 或 /home/user/.cache),且要避免跨分区统计失真。
- 一级扫描:
du -sh --max-depth=1 /var/* 2>/dev/null | sort -hr | head -10 - 发现
/var/lib异常大?继续下钻:du -sh --max-depth=1 /var/lib/* 2>/dev/null | sort -hr | head -10 - 加
-xdev参数防跨挂载:du -sh -x --max-depth=1 / 2>/dev/null | sort -hr | head -10 - 遇到 Docker:
docker system df查明细,docker system prune -f清无用资源
精准捕获单个超大文件:find 加约束,避开误删风险
直接 find / -size +1G 不仅慢,还可能扫到 /proc、/sys 等伪文件系统,甚至跨到 /mnt 备份盘,极不安全。
- 限定分区:
find /var -xdev -type f -size +500M -exec ls -lh {} \; - 过滤老旧日志:
find /tmp -type f -size +100M -mtime +7 - 跳过活跃日志:
find /var/log -type f -name "*.log.*" -size +100M(匹配syslog.1、nginx/error.log.20260901.gz等归档,不碰access.log) - 删前必查:
lsof /path/to/file确认无进程占用;若有,优先truncate -s 0 /path/to/file










