Linux :/tmp清理机制

/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=0
      
      • TMPTIME=0:每次开机都清理 /tmp
      • TMPTIME=-1:永不清理
      • TMPTIME=7:保留 7 天内访问过的临时文件

2. 定时任务(cron + tmpwatch / tmpreaper)

大多数老旧或轻量 Linux 系统使用 cron 定期执行 tmpwatchtmpreaper 工具清理 /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 10d
    
    • d: 目录类型
    • 1777: 权限(sticky bit)
    • 10d: 文件超过 10 天未被访问将被删除
  • 查看清理规则

    systemctl status systemd-tmpfiles-clean.timer
    
  • 手动触发清理

    systemd-tmpfiles --clean
    

在这里插入图片描述


二、判断你的系统使用了哪种清理机制

  1. 是否为 systemd 系统

    ps -p 1 -o comm=
    
    • 输出为 systemd → 使用 systemd-tmpfiles
    • 输出为 init → 可能是旧式机制
  2. 查看定时器是否启用

    systemctl list-timers | grep tmpfiles
    
    • 若有 systemd-tmpfiles-clean.timer → 表示已启用清理机制
  3. 检查 cron 脚本

    cat /etc/cron.daily/tmpwatch
    

    或:

    find /etc/cron.* -name '*tmp*'
    

三、额外建议

  • 不要手动频繁清空 /tmp,可能会误删服务或程序临时文件。

  • 若空间紧张,可临时清理

    find /tmp -type f -atime +10 -delete
    

    删除 10 天未访问的文件

  • 可以单独挂载 /tmp 分区并设置自动清理:

    • /etc/fstab 中用 tmpfsnoexec,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 的清理调试日志查看方法?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值