Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >tmp临时目录清理规则

tmp临时目录清理规则

作者头像
陳斯托洛夫斯記
发布于 2024-08-07 05:41:26
发布于 2024-08-07 05:41:26
54200
代码可运行
举报
文章被收录于专栏:XBDXBD
运行总次数:0
代码可运行

tmpfiles.d 描述

tmpfiles.d 配置文件定义了一套临时文件管理机制,主要用于管理易变的临时文件与目录,例如:/run、/tmp、/var\tmp、/sys、/proc、/var 下面的某些目录。 根据这些配置,在系统启动过程中创建易变的临时文件与目录,并在系统运行过程中进行周期性的清理。 守护进程经常需要在 /var 目录下拥有专属的运行时目录,以存放通信套接字或管道之类的文件。

配置目录及优先级

对于不同目录下的同名配置文件,仅以优先级最高的目录中的那一个为准。具体就是:/etc/tmpfiles.d 的优先级最高,/run/tmpfiles.d 的优先级居中,/usr/lib/tmpfiles.d 的优先级最低。 软件包应该将自带的配置文件安装在 /usr/lib/tmpfiles.d 目录中,而 /etc/tmpfiles.d 目录仅供系统管理员使用。 如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个配置文件,最佳做法是在 /etc/ 目录中创建一个指向 /dev/null 的同名符号链接,即可彻底屏蔽 /usr/lib/ 目录中的同名文件。

配置文件格式

配置文件的格式是每行对应一个路径,包含如下字段:类型、路径、权限、属主、属组、寿命、参数 #Type Path Mode User Group Age Argument d /run/tmp 0755 root root 10d -

类型

类型字段由一个单独的、表示类型的字母与一个可选的感叹号(!)和减号(-)组成。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
f:若指定的文件不存在,则创建它,否则什么也不做;
F:若指定的文件不存在,则创建它,否则清空已有文件;
w:若指定的文件存在,则将参数字段的内容写入该文件,否则什么也不做;
d:创建指定的目录,并赋于指定的 User/Group 与权限,如果指定的目录已经存在,那么仅调整 User/Group 与权限。如果指定了寿命字段,那么该目录中的内容将遵守基于时间的清理策略;
D:与 d 类似,但如果使用了 --remove 选项,那么将清空目录中的所有内容;
x:根据寿命字段清理过期文件时,忽略指定的路径及该路径下的所有内容,可以在路径字段中使用 shell 风格的通配符,这个保护措施对 r 与 R 无效;
X:根据寿命字段清理过期文件时,仅忽略指定的路径自身而不包括该路径下的其他内容,可以在路径字段中使用 shell 风格的通配符,这个保护措施对 r 与 R 无效;
r:若指定的文件或目录存在,则删除它,不可用于非空目录;
R:若指定的文件或目录存在,则递归删除它,可用于非空目录;
z:若指定的文件或目录存在,仅设置其自身的访问权限、属主、属组、重置 SELinux 安全上下文;
Z:若指定的文件或目录存在,则递归设置其访问权限、属主、属组、重置 SELinux 安全上下文;
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
使用了感叹号标记的行,仅可在系统启动过程中执行,而不能用于运行中的系统(会破坏系统的正常运行),未使用感叹号标记的行,可以在任意时间安全的执行。
systemd-tmpfiles 仅在明确使用了 --boot 选项的时候才会执行使用了感叹号标记的行。

# 例如
r! /tmp/.X[0-9]*-lock 	# 仅在系统启动时删除所有X11的锁文件(但在系统运行时禁止删除)

如果使用了减号,那么当该行创建(仅限于创建)操作失败时,将不会导致 systemd-tmpfiles 返回错误代码。

路径

路径字段指定文件系统路径,并且支持使用替换符,替换之后的最终路径必须是绝对路径。

权限

权限字段表示设置文件或目录的权限,如果省略或设为 “-“ 则表示使用默认权限,也就是:对于目录使用 0755,对于文件使用 0644,但对于 z、Z 表示不修改现有的权限,此字段对于 x、r、R、L、t、a 没有意义。

属主、属组

“属主”和”属组”字段分别表示文件或目录的所属用户与所属用户组,可以设为数字形式的UID/GID 值,也可以设为字符串形式的用户名/组名称。如果省略或设为 “-“ 则表示使用调用 systemd-tmpfiles 命令的用户及组,但对于 z、Z 来说,省略或设为 “-“ 则表示不修改现有的属主和属组。

寿命(Age)

该字段用于判定在清理过期文件或子目录时应该删除哪些,也就是决定了文件或子目录的寿命。如果文件或子目录的最后使用时间与当前系统时间之差大于“寿命”字段的值,那么这些文件或子目录将被删除,此字段的值是一个时间长度,可以使用下面的时间单位后缀: us(微秒)、ms(毫秒)、s(秒)、m(分)、h(时)、d(天)、w(周)。 可以同时使用多个时间单位,例如:5m10s表示5分10秒,如果省略了时间单位,那么表示使用默认单位 “秒”。 如果将此字段设为数字0,那么表示在每次清理时都无条件的删除所有文件或子目录。 此字段仅对 d, D, e, v, q, Q, C, x, X 有意义。如果省略此字段或将其设为 “-“ ,那么表示不进行任何清理。 如果此字段的值以 “~“ 开头, 那么表示在每次清理时都无条件的保留指定目录直属的文件与子目录, 也就是仅清理直属子目录下的内容。 “寿命”是根据对象的最后修改时间(mtime)、 最后访问时间(atime)、 最后状态变化时间(ctime)(目录除外) 计算的。 如果三者(或两者)中最晚的时间与当前系统时间之差大于”寿命”字段的值, 那么该对象就会被删除, 否则该对象将会被保留。

参数(Argument)

“参数”字段对不同的”类型”有不同的作用:对于 L 来说,用于指定软连接的目标路径。 对于 c, b 来说,用于以”主设备号:次设备号”的格式设定设备节点的主/次设备号(十进制整数),例如 “1:3“ 。 对于 f, F, w 来说,用于设置一个写入文件的短字符串(实际写入时会在末尾附加一个换行符)。 对于 C 来说,用于指定源文件或者源目录。 对于 t, T 来说,用于指定将要设置的扩展属性。 对于 a, A 来说,用于指定将要设置的ACL属性。 对于 h, H 来说,用于指定将要设置的文件属性。 对于其他类型无意义,将被忽略。 可以在”路径”(Path)与”参数”(Argument)字段中使用替换符。 不可识别的替换符将会被视为配置错误。 可识别的替换符如下: 替换符含义“%b“系统的”Boot ID”字符串“%C“缓存目录。对于 --user 模式来说是 $XDG_CACHE_HOME ,否则是 /var/cache%h“用户的家目录。运行命令的用户的家目录,对于系统实例则是 /root%H“系统的主机名(hostname)“%L“日志目录。对于 --user 模式来说是 $XDG_CONFIG_HOME/log,否则是 /var/log%t“运行时目录。对于 --user 模式来说是 $XDG_RUNTIME_DIR ,否则是 /run%S“状态目录。对于 --user 模式来说是 $XDG_CONFIG_HOME ,否则是 /var/lib%T“临时文件目录。也就是 /tmp%g“运行命令的用户组名称。对于系统实例则是 /root%G“运行命令的用户组数字GID 。对于系统实例则是 0%u“运行命令的用户名称。对于系统实例则是 /root%U“运行命令的用户数字UID 。对于系统实例则是 0%v“内核版本(uname -r 的输出)“%V“存放大体积临时文件以及持久临时文件的目录。也就是 /var/tmp%%“百分号自身(%)。使用%%表示一个真正的%字符

例子

按照指定的 User/Group 与权限创建目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在系统启动时按照指定的属主、属组、权限创建两个目录
vim /usr/lib/tmpfiles.d/supervisord.conf

d /var/run/supervisord 0755 root root 10d
d /run/supervisord 0755 root root 10d12h
# /var/run/supervisord 中超过10天的内容将被清理;
# /var/supervisord 中超过12.5 天的内容将被清理;

创建一个不会被定期清理的目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 在系统启动时按照指定的属主/属组创建一个目录
vim /usr/lib/tmpfiles.d/tmp.conf
d /var/tmp 0777 root root -

systemd-tmpfiles --create 	# 仅用于手工创建,以后开机会自动创建

启用系统启动过程中的清理,以及基于时间的清理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim/usr/lib/tmpfiles.d/dnf.conf
r! /var/cache/dnf/*/*/download_lock.pid
r! /var/cache/dnf/*/*/metadata_lock.pid
r! /var/lib/dnf/rpmdb_lock.pid
e  /var/cache/dnf/ - - - 30d

# 系统启动过程中将会清理 lock 文件。 /var/cache/dnf/ 目录中 闲置超过30天的内容将会被删除

在启动时清空缓存目录

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /usr/lib/tmpfiles.d/krb5rcache.conf
e! /var/cache/krb5rcache - - - 0

# 在启动时清空 /var/cache/krb5rcache/ 下的所有内容。即使此目录不存在也不会创建它。

systemd-tmpfiles

  • 描述

systemd-tmpfiles 根据配置文件 tmpfiles.d 的指引,创建、删除、清理、易变文件与临时文件。

选项

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--create:创建或写入 所有 f, F, w, d, D, v, p, L, c, b, m 标记的文件与目录。 所有 z, Z, t, T, a, A 标记的文件与目录都将被设置相应的 属主/属组、权限、安全标签;

--clean:清理 所有过期的 文件与目录

--remove:删除 D, R 标记的目录中的内容,以及 r, R 标记的目录与文件自身

--user:执行"用户"配置,也就是用户配置目录中的 tmpfiles.d 配置文件

--boot:执行带有"!"标记的行

--prefix=PATH:仅作用于 带有特定前缀的路径, 可以多次使用此选项

--exclude-prefix=PATH:忽略 带有特定前缀的路径, 可以多次使用此选项

服务

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# systemd-tmpfiles-clean.service服务通过systemd-tmpfiles-clean.timer服务定时启动
vim /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
[Unit]
Description=Daily Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)

[Timer]
OnBootSec=15min 		# 相对于机器被启动的时间点(默认开机15分钟执行服务)
OnUnitActiveSec=1d
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /usr/lib/systemd/system/systemd-tmpfiles-clean.service
[Unit]
Description=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=systemd-readahead-collect.service systemd-readahead-replay.service local-fs.target time-sync.target
Before=shutdown.target

[Service]
Type=oneshot 	# 这一选项适用于只执行一项任务,随后立即退出服务
ExecStart=/usr/bin/systemd-tmpfiles --clean		# 通过定期执行该命令完成清理
IOSchedulingClass=idle
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# /tmp 目录的清理规则主要取决于 /usr/lib/tmpfiles.d/tmp.conf 文件的设定,默认配置内容为:
vim /usr/lib/tmpfiles.d/tmp.conf
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d

x /tmp/systemd-private-%b-*
X /tmp/systemd-private-%b-*/tmp
x /var/tmp/systemd-private-%b-*
X /var/tmp/systemd-private-%b-*/tmp

清理/tmp目录超过10天的内容,但是匹配/tmp/systemd-private-%b-*的目录及其路径下的全部内容会被保留
清理/var/tmp目录超过30天的内容,但是匹配/var/tmp/systemd-private-%b-*的目录及其路径下的全部内容被保留

参考文档:https://www.jinbuguo.com/systemd/systemd-tmpfiles.html# https://www.jinbuguo.com/systemd/tmpfiles.d.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-08-082,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
tmp临时文件目录自动清理
Linux操作系统的/tmp目录保存临时文件,那么这个目录下的临时文件究竟会保存多久,何时被清理,通过什么方式(哪个服务)来维护清理工作呢?
Erwin
2019/12/31
7.9K0
/tmp目录清理问题
2019年7月10日 ⋅ 浏览量: 4   
以谁为师
2019/07/11
3.3K0
Unit 3
/etc/at.allow        ##默认不存在。一旦存在,/etc/at.deny失效
py3study
2020/01/14
4020
Linux From Scratch(LFS11.0)构建 LFS 系统 - Systemd 使用和配置
/etc/systemd/system.conf 文件包含一组控制 systemd 基本功能的选项。默认文件中所有条目都被注释掉,并标明了默认值。可以在这里修改日志级别,以及其他一些基本日志设定。
Lucifer三思而后行
2021/10/08
4540
Linux 这50个 systemd 命令值得每位Linux运维工程师收藏!
systemd是一种Linux系统初始化和管理守护进程的系统和服务管理器。它引入了一组命令行工具,用于管理和监控系统状态、服务单元和日志。本文将介绍一些常用的systemd命令,包括systemdctl、journalctl、hostnamectl、timedatectl、localectl、loginctl、systemd-analyze、systemd-cgls、systemd-cgtop、systemd-delta、systemd-path、systemd-nspawn、systemd-machine-id-setup、systemd-escape、systemd-cat、systemd-notify、systemd-tmpfiles、systemd-run、systemd-mount、systemd-ask-password、systemd-inhibit、systemd-dissect、systemd-resolve和systemd-firstboot。
网络技术联盟站
2023/07/14
9230
Linux 这50个 systemd 命令值得每位Linux运维工程师收藏!
Test2 unit2+3
-rw-r--r--. 1 root root 0 Nov  7 09:14 file
py3study
2020/01/14
4320
SpringBoot文件上传异常之提示The temporary upload location xxx is not valid
SpringBoot搭建的应用,一直工作得好好的,突然发现上传文件失败,提示org.springframework.web.multipart.MultipartException: Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.6239989728636105816.19530/work/Tomcat/localhost/ROOT] is not valid目录非法,实际查看目录,结果还真没有,下面就这个问题的表现,分析下SpringBoot针对文件上传的处理过程
一灰灰blog
2019/05/26
3.3K0
关于 Linux 中 systemd 的一些笔记
傍晚时分,你坐在屋檐下,看着天慢慢地黑下去,心里寂寞而凄凉,感到自己的生命被剥夺了。当时我是个年轻人,但我害怕这样生活下去,衰老下去。在我看来,这是比死亡更可怕的事。--------王小波
山河已无恙
2023/01/30
7520
关于 Linux 中 systemd 的一些笔记
【LFS 系列】从零开始 DIY Linux 系统:(七)基本系统配置 - Systemd 的用法与配置
/etc/systemd/system.conf 文件包含了大量的 systemd 控制命令。
Lucifer三思而后行
2021/10/08
5540
【LFS 系列】从零开始 DIY Linux 系统:(六)构建 LFS 系统 - Systemd-219
首先创建文件使得当使用第五章中编译的 Util-Linux 以及停用默认的 LTO(链接时优化) 时能顺利编译 systemd:
Lucifer三思而后行
2021/10/08
8860
深入探究Linux树状目录结构
Linux 作为一款广泛使用的开源操作系统,其目录结构采用了树状设计,这种结构清晰、有条理,便于用户和系统进行文件管理与操作。
池央
2025/01/16
2860
深入探究Linux树状目录结构
Linxu学习(一)——Linux目录与文件
· 若是 c 则表示为装置文件里面的串行端口设备,例如键盘、鼠标(一次性读取装置)。
传说之下的花儿
2023/04/16
7370
Linxu学习(一)——Linux目录与文件
ELK-单机部署Elasticsearch
Elasticsearch(简称ES)是一个开源的分布式搜索引擎,Elasticsearch还是一个分布式文档数据库。所以它提供了大量数据的存储功能,快速的搜索与分析功能。
星哥玩云
2022/09/15
6150
ELK-单机部署Elasticsearch
Linux操作系统完整目录结构概览
Linux,作为一种开源的操作系统,其文件系统设计展现了极高的灵活性和效率。在每一个 Linux 系统中,都存在一套标准的目录结构,这套结构不仅映射了操作系统的运作机制,同时也为管理员与用户提供了一种便捷的文件管理方式。对于 Linux 的用户和管理者而言,掌握这些目录的知识是极其重要的一环。🧑‍💻
Lethehong
2025/03/20
1970
Linux操作系统完整目录结构概览
Springboot——报错总结
思索
2024/08/16
1190
Supervisord安装配置笔记 原
想要了解怎么配置需要管理的进程,只要打开 supervisord.conf 就可以了,里面有很详细的注释信息。
bdcn
2018/09/12
6990
Linux1_快捷键+目录结构
ctrl+p向前翻一个命令 ctrl+n向后翻一个命令 ctrl+b光标向前 ctrl+f光标向后 ctrl+a光标到行首 ctrl+e光标到行尾 ctrl+h或退格键 删除光标前的字符 ctrl+d删除光标前的字符(光标覆盖的字符) ctrl+u删除光标前的所有
Y大宽
2019/05/23
7850
这个python程序怎么就是没更新
把supervisor进程重启一把 supervisorctl status 服务又正常了 托管的代码也同样更新成功
莫韵
2018/06/07
9950
Linux 系统目录结构
在 Linux 系统中,有几个目录是比较重要的,平时需要注意不要误删除或者随意更改内部文件。
用户8682940
2021/12/02
2.4K0
关于Linux中作业调度 crond 和 systemd.timer 使用场景的一些笔记
crond 这里不多介绍,小伙伴们应该都接触过。所以直接来看 systemd.timer
山河已无恙
2023/01/30
1K0
相关推荐
tmp临时文件目录自动清理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验