首页/系统/信创系统运维速查/systemd-tmpfiles 管理临时文件
服务与运维65 条

systemd-tmpfiles 管理临时文件

用 tmpfiles.d 规则声明临时目录与清理周期:--create 建目录修权限,--clean 清理过期内容;发行版自带规则在 /usr/lib/tmpfiles.d,本机覆盖放 /etc/tmpfiles.d。

信创系统运维速查系统更新于 2026-10-13

systemd-tmpfiles 是做什么的

systemd-tmpfiles 用声明式规则管理临时目录与文件:规则文件写在 /usr/lib/tmpfiles.d(发行版自带)、/etc/tmpfiles.d(本机覆盖)与 /run/tmpfiles.d 下,用 type、路径、权限、属主、age 等字段描述「目录怎么建、多久没访问就清」。命令的 --create 负责按规则建目录与修权限,--clean 按 age 清理过期内容,--remove 删除整条规则对应的对象。麒麟、UOS 与 openEuler 都用这套机制管理 /tmp、/run 等目录。

基本信息

规则目录/etc/tmpfiles.d 优先于 /usr/lib/tmpfiles.d,同名即覆盖
建目录修权限systemd-tmpfiles --create 规则文件
清理过期systemd-tmpfiles --clean
定时任务systemd-tmpfiles-clean.timer,默认每天触发一次
权限要求root,普通用户无法创建系统目录或改属主

典型使用场景

  • 自建应用的缓存目录需要固定属主与权限,用规则声明避免升级后目录丢失或被改权限
  • 给业务临时目录设置保留期,例如上传缓存只留 7 天,避免磁盘被历史文件慢慢撑满
  • 排查「/tmp 里的文件莫名消失」:对照发行版 tmpfiles 规则里的 age 与清理周期
  • 批量修正运行时目录权限,用一条规则代替一长串 mkdir 加 chown 加 chmod
  • 交付前的标准化配置:把目录与清理策略固化进镜像或基线脚本,减少人工步骤
  • 清理策略上线前评估影响:先 --dry-run 观察会被删掉的对象再放开

自定义规则与执行

自定义规则与执行
# /etc/tmpfiles.d/myapp.conf
d /var/cache/myapp 0750 myapp myapp 30d -   # 目录,权限 0750,30 天未访问即清理
# 立即按规则创建目录并修正权限
systemd-tmpfiles --create /etc/tmpfiles.d/myapp.conf
systemd-tmpfiles --clean                    # 按规则清理过期条目
systemd-tmpfiles --dry-run --clean          # 先预演,确认删除范围
systemctl list-timers systemd-tmpfiles-clean.timer   # 查看定时器下次触发
ls -ld /var/cache/myapp                     # 核对目录权限与属主

规则字段读法

字段位置含义常见取值
第 1 列 type对象类型与对已存在对象的处理方式d 目录、f 文件、x 排除、z 修正
第 2 列 path目标路径,支持通配符/var/cache/myapp
第 3 列 mode权限位,短横线表示保持不动0750
第 4/5 列 user/group属主与属组,横线表示不修改myapp myapp
第 6 列 age清理阈值,配合 --clean 使用30d、7d,横线表示不清理
第 7 列 argument文件内容或链接目标,目录一般不使用-
按 age 清理依赖 systemd-tmpfiles-clean.timer 周期执行,只写规则不建定时器不会自动清理;/tmp 与 /var/tmp 的默认策略由发行版规则控制,业务数据不要放在那里长期保存。
在 /etc/tmpfiles.d 下写与发行版同名的规则是整份覆盖而不是合并,修改前先备份原文件并 diff,避免不小心放松了系统目录的权限或清理策略。

易错点

  • 认为加了 age 字段就会自动清理:没有清理定时器或未执行 --clean,过期文件会一直留着
  • 把 d 规则第 7 列当成内容模板使用,语义混乱且不生效,目录类型该列一般写横线占位
  • 同名规则覆盖发行版默认文件后未复核权限位,可能让系统目录权限变宽,属于典型安全问题
  • 对仍被业务写入的目录设置过短 age,清理逻辑会删掉正在使用的文件,先确认业务读写模式再定保留期

数据来源与参考

  • man 5 tmpfiles.d
  • man 8 systemd-tmpfiles
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌