安全清理/tmp目录的关键是“删得准、控得住”,需依托systemd-tmpfiles机制,通过配置文件精准控制保留时间与排除路径,禁用暴力删除,区分/tmp与/var/tmp策略。

安全清理 /tmp 目录的关键,不是“删得快”,而是“删得准、控得住”——既要释放空间,又不能误删正在被进程使用的文件(如 socket、pid、锁文件),更不能破坏服务稳定性。
优先启用 systemd-tmpfiles 标准机制
现代 Linux(systemd 系统)默认已内置安全清理能力,无需手动写脚本或配 cron。确认并利用它是最稳妥的第一步:
- 检查定时器是否启用:
systemctl is-active systemd-tmpfiles-clean.timer(应返回active) - 查看当前生效规则:
systemd-tmpfiles --cat-config | grep '/tmp',重点确认类似d /tmp 1777 root root 10d的条目存在 - 模拟清理效果(不删除):
systemd-tmpfiles --clean --dry-run /usr/lib/tmpfiles.d/tmp.conf,观察哪些路径会被处理、哪些被跳过
按需自定义清理策略,避开高风险路径
直接修改默认配置风险低、可追溯。在 /etc/tmpfiles.d/ 下新建规则文件(如 my-tmp.conf),用声明式语法精准控制:
- 缩短保留时间:例如
d /tmp 1777 root root 7d(7 天未访问即清理) - 保护关键子目录:
X /tmp/systemd-private-%m-*(X 表示完全跳过,通配符需用%m占位符,不能写*) - 排除特定用途目录:
x /tmp/myapp-cache(x 表示进入该目录但不清理其自身;若连子项都不清,改用X) - 避免使用
D类型(递归清空目录),极易误删运行中数据
紧急手动清理必须加防护条件
仅当磁盘告警、服务卡顿且自动机制尚未生效时才考虑手动干预,且必须过滤掉活跃文件:
- 只删普通文件,跳过 socket、fifo、目录:
find /tmp -depth -type f -atime +10 -delete - 排除 systemd 私有目录:
find /tmp -path '/tmp/systemd-private-*' -prune -o -type f -atime +10 -print0 | xargs -0 rm -f - 先查大户再动手:
du -sh /tmp/* 2>/dev/null | sort -hr | head -5,针对性检查而非全量扫荡 -
绝对禁用:
rm -rf /tmp/*或rm -rf /tmp/—— 这会强制删除所有内容,包括正在使用的临时资源
区分 /tmp 和 /var/tmp,避免策略错配
两者语义不同,混用清理逻辑会引发意外:
-
/tmp:短期存放,重启可能清空(若挂载为 tmpfs),默认按访问时间(atime)清理,适合设 3–10 天策略 -
/var/tmp:POSIX 定义的“跨重启临时目录”,标准建议保留至少 30 天,通常不被 systemd-tmpfiles-clean 自动覆盖,需应用自行管理或单独配置(如q /var/tmp 1777 root root 30d) - 不要对
/var/tmp使用/tmp的激进策略,否则长期运行的服务缓存可能被误删











