Linux /tmp 清理由 systemd-tmpfiles 统一管理,通过开机清理、定时任务(systemd-tmpfiles-clean.timer)和配置文件(/etc/tmpfiles.d/*.conf)三层机制协同实现,支持安全自定义与监控排错。

Linux 系统清理 /tmp 目录,*不能直接 `rm -rf /tmp/或依赖 cron 脚本**,现代发行版(Ubuntu 22.04+、Debian 11+、RHEL/CentOS 8+、Fedora 等)默认由systemd-tmpfiles` 统一管理,安全、自动、可配置。
✅ 确认系统是否走标准机制
运行以下命令验证:
systemctl is-active systemd-tmpfiles-clean.timer
输出应为 active。
再检查 /tmp 是否挂载为 tmpfs:
findmnt -T /tmp
若显示 tmpfs,说明重启即清空——此时 systemd-tmpfiles 的定时清理对 /tmp 本身不生效(只作用于非 tmpfs 挂载的 /tmp,比如挂载在磁盘分区上);但 /var/tmp 仍受其管控。
✅ 查看和修改清理规则(推荐方式)
所有策略由配置文件驱动,优先级:/etc/tmpfiles.d/*.conf > /usr/lib/tmpfiles.d/*.conf
- 默认清理规则通常在
/usr/lib/tmpfiles.d/tmp.conf,不要直接改它(会被系统更新覆盖); - 应在
/etc/tmpfiles.d/下新建或编辑配置,例如:
sudo tee /etc/tmpfiles.d/tmp.conf <<'EOF' d /tmp 1777 root root 7d X /tmp/myapp-cache x /tmp/systemd-private-%m-* EOF
说明:
-
d /tmp 1777 root root 7d:清理/tmp下 7 天内未被访问(atime) 的文件和子目录(不删/tmp自身); -
X /tmp/myapp-cache:完全跳过该路径,不进入、不检查; -
x /tmp/systemd-private-%m-*:用%m替代机器 ID,正确匹配 systemd 私有临时目录(通配符*在 tmpfiles 中无效,必须用%m等占位符)。
改完无需重启,下次定时任务(默认每天执行)或手动触发即生效。
Linux系统管理专家,覆盖12大模块:用户权限、SSH、存储、网络、systemd、防火墙、日志监控、备份恢复、TLS证书、Ansible、容器、IaC。提供配置、验证、加固、监控、备份、自动化、故障排查、回滚闭环。关键词:useradd、sudo、sshd_config、chmod、SEL...
✅ 手动验证或紧急清理(慎用)
如磁盘告急需立即释放空间,*避免 `rm -rf /tmp/`**(可能误删 socket、pid 等正在使用的文件,导致服务中断):
-
先预览将被清理的内容(安全第一):
systemd-tmpfiles --clean --dry-run /etc/tmpfiles.d/*.conf
-
安全手动清理旧文件(仅普通文件,跳过私有目录):
find /tmp -path '/tmp/systemd-private-*' -prune -o -type f -atime +7 -delete 2>/dev/null
-
查找
/tmp占用大户:du -sh /tmp/* 2>/dev/null | sort -hr | head -10
⚠️ 常见错误提醒
- ❌ 不要写
x /tmp/systemd-private-*——*不识别,必须用%m; - ❌ 不要
chmod 777 /tmp或随意改权限,1777(含粘滞位)是必须的,确保用户只能删自己创建的文件; - ❌ 不要启用额外的 cron 清理脚本,会与
systemd-tmpfiles-clean.timer冲突; - ❌ 不要用
mtime判断清理时机(修改时间),systemd-tmpfiles默认按atime(访问时间),更符合“临时文件闲置即淘汰”的语义。
不复杂但容易忽略。

















