Linux /tmp 目录管理
Linux会自动清理/tmp目录,但清理的频率、具体行为取决于你的系统配置和发行版。
主要有以下几种机制:
1. 基于 systemd 的系统(大多数现代发行版,如 Ubuntu、Debian、CentOS 等)
通过systemd-tmpfiles服务管理。
清理规则:默认配置通常在
/usr/lib/tmpfiles.d/tmp.conf中。清理策略:
清理
/tmp中10天内未被访问、修改或状态变更的文件和目录。每次开机、或
systemd-tmpfiles --clean定时运行时触发。
特殊行为:
不会删除
/tmp中的根目录下的文件(即/tmp下直接存放的文件),只清理子目录内的文件?
实际上规则更细:tmp.conf默认清理/tmp下任何满足10天条件的文件/目录(包括直接放在/tmp下的文件),但以.开头的隐藏文件、systemd 自动挂载点、容器/快照临时文件等不会被清理。你可以通过创建
/etc/tmpfiles.d/tmp.conf覆盖规则(例如改成7天,或禁止清理)。
2. 使用tmpreaper的旧系统(或手动安装)
部分发行版(如一些旧版 Debian/Ubuntu 前 systemd 时期或嵌入式)使用tmpreaper工具。
通常由 cron 定期运行(如每天)。
默认也会清理
/tmp中超过指定天数(例如7天或10天)的文件。支持更灵活的排除规则。
3. 内存文件系统 (tmpfs) 形式的/tmp
很多 Linux 发行版将/tmp挂载为tmpfs(数据存在内存 + swap 中)。
清理时机:重启时会完全清空(因为是内存中的文件系统,重启后数据自然消失)。
好处:速度快,但重启后临时文件丢失。
检查方法:运行
mount | grep /tmp
如果看到tmpfs on /tmp type tmpfs,说明是内存磁盘。
4. 不自动清理的情况(通常不会发生)
如果
/tmp是一个普通硬盘目录(非 tmpfs),且系统:没有运行
systemd-tmpfiles-clean.timer没有运行
tmpreaper的 cron 任务没有其他清理脚本
那么/tmp可能永远不会被自动清理。
但现代主流发行版默认都会清理(systemd 或 cron)。
总结答案:
✅是的,Linux 会自动清理/tmp,最常见的行为是:
重启时清空(如果
/tmp是tmpfs)定期删除10天以上未使用的文件(如果
/tmp是普通磁盘目录,通过 systemd 或 tmpreaper)
⚠️ 不要依赖/tmp作为长期存储,重要文件请放在/var/tmp(清理周期更长)或普通用户目录。
如何查看/修改清理策略?
查看清理 timer:
systemctl status systemd-tmpfiles-clean.timer手动触发清理:
sudo systemd-tmpfiles --clean修改清理时间:编辑
/usr/lib/tmpfiles.d/tmp.conf或覆盖/etc/tmpfiles.d/tmp.conf,例如设置 7 天:d /tmp 1777 root root 7d
(然后重启服务或用systemd-tmpfiles --create生效)
