不能直接“删除所有临时文件”,必须分路径、分策略处理:/tmp、/var/tmp、~/.cache等位置用途不同,硬删会导致程序崩溃;systemd-tmpfiles --clean最安全;手动清理需避开高危操作并加时间限制。

不能直接“删除所有临时文件”——因为临时文件分散在多个位置、用途不同,有些正在被进程使用,硬删会导致程序崩溃或系统异常。必须分路径、分策略处理。
哪些目录算临时文件存放地
Linux没有统一的“临时文件”定义,常见位置有:
-
/tmp:最典型,重启后通常清空,但很多服务会持续写入 -
/var/tmp:设计为跨重启保留,常被数据库、编译工具等长期占用 -
~/.cache:用户级缓存,多数应用(如 Firefox、pip、flatpak)在此生成临时数据 -
/var/log/journal:systemd 日志,体积膨胀快,但属于运行时日志而非纯临时文件 -
/var/lib/apt/lists/和/var/cache/apt/archives/:APT 包管理器下载的临时元数据和 deb 包
盲目 rm -rf /tmp/* 看似干净,但可能 kill 正在用 /tmp/systemd-private-* 的服务;~/.cache 里删掉 pip 的 wheel 缓存,下次安装就变慢。
systemd-tmpfiles --clean 是最安全的起点
如果你的系统用 systemd(绝大多数现代发行版),systemd-tmpfiles 是唯一能识别“哪些该删、哪些还在用”的机制。它读取 /etc/tmpfiles.d/*.conf 和 /usr/lib/tmpfiles.d/*.conf 中的规则,只清理超期且未被打开的文件。
执行前先检查规则:
ls /usr/lib/tmpfiles.d/ | grep -E "(tmp|cache)"
再运行清理:
sudo systemd-tmpfiles --clean
这个命令不会碰 /var/tmp 或 ~/.cache,也不会删正在被 flock 或 open(O_TMPFILE) 占用的文件——这是它比 find -mtime +7 可靠的根本原因。
Linux 安全审计工具,检查 SSH 配置、开放/监听端口、防火墙规则(ufw/iptables/nftables)、失败登录尝试、sudoers 权限...
手动清理要避开三类坑
真要自己删,必须绕开这些高危操作:
- 别用
rm -rf /tmp/*:会误删/tmp/.X11-unix/(X11 socket)、/tmp/.docker-unix/,导致 GUI 或 Docker 挂掉 - 别在
/var/tmp直接rm -rf:PostgreSQL 的pg_stat_tmp、Java 应用的hsperfdata_*都放这儿,删了会触发 JVM crash 或 DB 重同步 - 别对
~/.cache无差别rm -rf:~/.cache/thumbnails删了只是重建慢;但~/.cache/gstreamer-1.0/被删可能导致视频播放器初始化失败
更稳妥的做法是按需清理:
- 清 APT 缓存:
sudo apt-get clean(Debian/Ubuntu)或sudo dnf clean all(Fedora) - 清用户缓存中可重建的部分:
rm -rf ~/.cache/{pip,electron,go-build} - 清 journal 日志:
sudo journalctl --vacuum-size=500M(保留最近 500MB)
定期清理必须配 age-based 条件
用 find 批量删,一定要加访问/修改时间限制,否则等于定时自毁:
sudo find /tmp -depth -type f -name "*.tmp" -mtime +3 -delete
关键点:
-
-mtime +3表示“3天前修改的”,不是“3天没动过”。很多临时文件刚创建就被写入一次,之后只读,-atime更准但需要挂载时启用relatime -
-depth防止先删父目录导致子项报错 - 永远优先用
-delete而非-exec rm -f {} \;:前者原子、高效,后者可能因文件名含空格或换行符出错 - 别对
/var/tmp用+3,建议至少+30,甚至不用find,改用tmpwatch 30d /var/tmp(如果已安装)
真正容易被忽略的是:/tmp 下的符号链接、命名管道(FIFO)、socket 文件——find -type f 会漏掉它们,但 systemd-tmpfiles 能识别并安全处理。如果你的系统没跑 systemd,那得先确认是否真能承受“删完 X11 就黑屏”的风险。










