/tmp清理机制
在 Linux 中,/tmp 目录用于存放临时文件,系统和应用程序在运行过程中会在该目录中创建临时数据。为了避免空间占满、旧文件堆积,Linux 系统通常会有一套机制对 /tmp 目录进行自动清理。这套机制会因发行版、系统配置、使用的 init 系统(如 systemd、SysVinit)而异。
下面是 /tmp 清理机制的详解:
一、常见的 /tmp 清理机制
1. 开机时清理(early boot cleanup)
某些 Linux 系统会在开机时自动清理 /tmp 目录中上次关机遗留的过期文件。
-
适用系统:部分基于
SysVinit的老系统,如 CentOS 6、RHEL 6。 -
配置文件:
-
/etc/sysconfig/rcS中可能有如下配置项:TMPTIME=0TMPTIME=0:每次开机都清理/tmpTMPTIME=-1:永不清理TMPTIME=7:保留 7 天内访问过的临时文件
-
2. 定时任务(cron + tmpwatch / tmpreaper)
大多数老旧或轻量 Linux 系统使用 cron 定期执行 tmpwatch 或 tmpreaper 工具清理 /tmp。
tmpwatch(RHEL/CentOS 常见)
-
清理逻辑:删除 n 小时未被访问 的文件
-
示例路径:
/etc/cron.daily/tmpwatch -
示例脚本内容:
/usr/sbin/tmpwatch 240 /tmp表示清理
/tmp中 10 天(240 小时)未访问的文件。
tmpreaper(Debian/Ubuntu 常见)
- 更细化的规则,比如排除某些目录、使用白名单。
3. systemd-tmpfiles 机制(现代 systemd 系统)
现代系统(如 RHEL 7/8/9、CentOS 7/8、Ubuntu 20.04+、Debian 10+)中 /tmp 的清理通常由 systemd-tmpfiles 服务统一管理。
-
核心配置路径:
/usr/lib/tmpfiles.d/tmp.conf/etc/tmpfiles.d/*.conf(可覆盖)
-
示例配置内容:
#Type Path Mode UID GID Age Argument d /tmp 1777 root root 10dd: 目录类型1777: 权限(sticky bit)10d: 文件超过 10 天未被访问将被删除
-
查看清理规则:
systemctl status systemd-tmpfiles-clean.timer -
手动触发清理:
systemd-tmpfiles --clean

二、判断你的系统使用了哪种清理机制
-
是否为 systemd 系统:
ps -p 1 -o comm=- 输出为
systemd→ 使用systemd-tmpfiles - 输出为
init→ 可能是旧式机制
- 输出为
-
查看定时器是否启用:
systemctl list-timers | grep tmpfiles- 若有
systemd-tmpfiles-clean.timer→ 表示已启用清理机制
- 若有
-
检查 cron 脚本:
cat /etc/cron.daily/tmpwatch或:
find /etc/cron.* -name '*tmp*'
三、额外建议
-
不要手动频繁清空
/tmp,可能会误删服务或程序临时文件。 -
若空间紧张,可临时清理:
find /tmp -type f -atime +10 -delete删除 10 天未访问的文件
-
可以单独挂载
/tmp分区并设置自动清理:- 在
/etc/fstab中用tmpfs或noexec,nosuid限制
- 在
四、其他临时目录说明
| 目录 | 说明 |
|---|---|
/tmp | 所有用户与系统程序的临时文件 |
/var/tmp | 临时但需跨重启保存的文件(清理周期较长) |
/dev/shm | 基于内存的临时文件系统(共享内存) |
是否需要我根据你当前的 Linux 发行版和版本帮你判断 /tmp 的清理机制?你可以贴上 cat /etc/os-release 的输出。
systemd-tmpfiles-clean.timer 说明
你这份 /usr/lib/tmpfiles.d/tmp.conf 表示你的系统采用了 systemd-tmpfiles 机制 来清理 /tmp 和 /var/tmp,以下是解析说明和行为总结:
✅ 配置详解
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d
v:表示这是一个虚拟路径项,systemd 不会创建目录,只负责清理已有内容。/tmp、/var/tmp:分别指定清理路径。1777:权限为 1777(即有 sticky bit 的 world-writable 目录,避免非属主文件被误删)。10d:删除访问时间(atime)超过 10 天的文件。30d:同理,/var/tmp保留 30 天。
接下来的这些是排除规则:
x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x/X:表示排除的路径(不要清理)%b:是 systemd 的变量,表示当前 boot ID。用于排除带有PrivateTmp的服务所创建的临时私有目录。
🕒 清理机制运行方式
清理操作由 systemd-tmpfiles-clean.timer 定期触发:
查看是否启用清理计划:
systemctl status systemd-tmpfiles-clean.timer
查看计划任务的运行时间:
systemctl list-timers --all | grep tmpfiles
你应该能看到类似下面的输出:
NEXT LEFT LAST PASSED UNIT ACTIVATES
Tue 2025-07-02 00:00:00 CST 14h Tue 2025-07-01 00:00:01 CST 10min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
🧪 手动触发清理测试
你可以手动触发一次 /tmp 清理来验证效果(⚠️注意风险):
sudo systemd-tmpfiles --clean
如果想查看哪些文件会被清理,可以先 dry-run:
sudo systemd-tmpfiles --clean --remove
🔒 建议和提示
-
不要轻易修改
/usr/lib/tmpfiles.d/tmp.conf,因为它可能被系统升级覆盖。 -
若需自定义,请在
/etc/tmpfiles.d/tmp.conf中创建同名配置文件,修改如:v /tmp 1777 root root 3d这会覆盖原来的
10d配置,将/tmp的保留时间改为 3 天。
是否需要我帮你定制 /etc/tmpfiles.d/tmp.conf,或给出 /tmp 的清理调试日志查看方法?
880

被折叠的 条评论
为什么被折叠?



