用途:在 Linux 虚拟机上回收磁盘空间。当用户提出“disk cleanup”“free up space”“clean up the VM”,磁盘占用超过 80%,或经历大型构建、git 操作、Docker 镜像堆积后使用。
流程:先记录基线(df -h);再对全部挂载点(不仅 /)做盘点,用 df -i 查 inode 耗尽,用 lsof +L1 查已删除但仍被打开的文件,用 du -xsh 统计 ~/.hermes、~/.cache、/tmp、Docker(docker system df、docker images)、apt/日志/pip/uv 缓存、journalctl --disk-usage、臃肿 git 仓库等占用并排序(关注 50M 以上);然后把目标分为“安全”与“需询问”两类,执行前先向用户展示表格;执行时记录每个目标前后大小;最后用 df -h 对比基线验证。
安全类可直接执行:uv cache prune、pip cache purge、apt autoclean、journalctl --vacuum-size=50M、删除轮转日志(find /var/log ( -name ".gz" -o -name ".1" -o -name "*.old" ) -delete)、删除 ~/.cache/puppeteer 与 ~/.cache/ms-playwright、docker image prune -f、docker builder prune -f --filter until=168h --reserved-space 10GB。需询问类包括 git gc --aggressive --prune=now、apt autoremove、旧 DB 备份、陈旧 /tmp 目录、停止容器的镜像、会话检查点、大型技能引用、项目上传、运行中服务的镜像。
常见问题:df 有空闲块但写入报 ENOSPC 多为 inode 耗尽;df 显示满而 du 为空通常是进程持有已删除文件;git gc 无可回收对象时不会释放空间;tmp_pack 残留可能因 git 进程或锁文件;docker rmi 失败需先 docker rm 容器;apt autoremove 可能列出有用包需人工确认;journalctl --vacuum-size 失败可重启 systemd-journald;uv 不在 PATH 时用 python -m uv cache prune。
限制:apt、journalctl 与 /var/log 操作需要 root,非 root 用户可盘点但无法清理系统路径;清理前须由用户确认“需询问”类目标,涉及用户数据或运行中服务时可能具破坏性。