linux中/tmp目录不“用完即删”,而是由systemd-tmpfiles-clean.timer每日触发,依据/etc/tmpfiles.d/下配置(如d /tmp 1777 root root 10d)按atime清理超期且未被进程占用的文件,支持修改保留天数、排除路径及挂载tmpfs优化。

Linux 中 /tmp 目录不会自动“用完即删”,而是靠配置驱动的定期清理机制防止堆积。核心在于 systemd-tmpfiles-clean 定时任务 + 配置文件规则,不是靠脚本或手动干预维持。
确认当前清理机制是否启用
先检查系统是否使用 systemd 管理清理:
- 运行 systemctl list-timers | grep tmpfiles,看到
systemd-tmpfiles-clean.timer处于 active 状态且有下次执行时间 - 运行 systemctl is-enabled systemd-tmpfiles-clean.timer,返回
enabled表示已开机自启 - 查看日志:journalctl -u systemd-tmpfiles-clean --since "1 day ago",确认最近一次清理是否成功执行
修改保留时间(最常用定制)
默认通常保留 10 天未访问的文件,可通过覆盖配置调整:
- 编辑 /etc/tmpfiles.d/tmp.conf(优先级高于系统默认配置)
- 找到类似这行:
d /tmp 1777 root root 10d - 把
10d改为需要的天数,例如7d或3d - 保存后执行:sudo systemd-tmpfiles --create(同步权限和目录结构)
- 重启定时器:sudo systemctl restart systemd-tmpfiles-clean.timer
排除不希望被清理的路径
某些应用临时数据(如数据库 socket、GUI 会话目录)需长期保留,避免误删:
- 在 /etc/tmpfiles.d/tmp.conf 中新增排除行,例如:
x /tmp/.X11-unix - - - -或x /tmp/myapp-cache - - - 30d -
x表示完全跳过该路径及其子内容;X表示只跳过路径本身(不递归) - 通配符可用,如
x /tmp/systemd-private-*排除所有 systemd 私有目录
补充建议:挂载为 tmpfs(可选但高效)
若服务器内存充足,且临时文件多为短生命周期读写密集型,可考虑将 `/tmp` 挂为 tmpfs:
- 编辑 /etc/fstab,添加一行:
tmpfs /tmp tmpfs defaults,size=2G,mode=1777 0 0 - 执行 sudo mount -o remount /tmp
- 效果:所有内容存于内存,重启即清空,彻底规避磁盘堆积风险;同时受 size 限制,不会撑爆根分区











