【Linux】tmpfile 使用介绍
tmpfile 使用介绍
1 介绍
很多情况下,需要系统自动识别/tmp、/var/tmp下的临时目录,并将其自动清理其中的过期文件。这个工具就是systemd-tmpfiles。
网上很多博客使用tmpwatch+cron的方法来管理临时文件和临时存放文件的目录,在后期的版本中都已经修改为使用systemd-tmpfiles+systemd-tmpfiles-timers替换早期版本。
2 systemd-tmpfiles
systemd提供了一个结构化的可配置方法来管理临时文件和目录,即systemd-tmpfiles,可以创建、删除和管理临时文件的服务。旧版本系统使用watchtmp+cron来共同实现管理临时文件。
systemd启动后,其中一个启动的服务单元是systemd-tmpfiles-setup,该服务的命令为:systemd-tmpfiles --creat/–clean *conf , *conf是可选的,不写默认是使用所有配置文件。
-
/etc/tmpfiles.d/*conf ,管理员可修改的配置文件
-
/run/tmpfiles.d/*conf ,daemon应用程序自己管理的配置文件,不建议更改
-
/usr/lib/tmpfiles.d/*conf,rpm软件安装时,自动更新的配置文件,不能更改
3 查看服务状态
systemctl status systemd-tmpfiles* ● systemd-tmpfiles-setup-dev.service - Create Static Device Nodes in /dev Loaded: loaded (/lib/systemd/system/systemd-tmpfiles-setup-dev.service; static; vendor preset: enabled) Active: active (exited) since Tue 2023-01-31 15:37:13 CST; 6 days ago Docs: man:tmpfiles.d(5) man:systemd-tmpfiles(8) Process: 332 ExecStart=/bin/systemd-tmpfiles --prefix=/dev --create --boot (code=exited, status=0/SUCCESS) Main PID: 332 (code=exited, status=0/SUCCESS) Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable. ● systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories Loaded: loaded (/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: enabled) Active: active (waiting) since Tue 2023-01-31 15:37:15 CST; 6 days ago Trigger: Tue 2023-02-07 15:52:14 CST; 23h left Docs: man:tmpfiles.d(5) man:systemd-tmpfiles(8) Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable. ● systemd-tmpfiles-setup.service - Create Volatile Files and Directories Loaded: loaded (/lib/systemd/system/systemd-tmpfiles-setup.service; static; vendor preset: enabled) Active: active (exited) since Tue 2023-01-31 15:37:14 CST; 6 days ago Docs: man:tmpfiles.d(5) man:systemd-tmpfiles(8) Process: 648 ExecStart=/bin/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev (code=exited, status=0/SUCCESS) Main PID: 648 (code=exited, status=0/SUCCESS) Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
4 systemd-tmpfiles-clean.timer
systemd-tmpfiles-clean.timer 计时器,是代替cron来完成定时清理的工作。
上一章节中,可以看到使用systemctl status systemd-tmpfiles-clean.timer 可以获取到进程状态
那么如何来设置并查看剩余倒计时的呢?
4.1 /usr/lib/systemd/system/systemd-tmpfiles-clean.timer
通过文件/usr/lib/systemd/system/systemd-tmpfiles-clean.timer 可以设置计时器的时间触发间隔,如下文所示:
cat /usr/lib/systemd/system/systemd-tmpfiles-clean.timer \# SPDX-License-Identifier: LGPL-2.1+ \# \# This file is part of systemd. \# \# systemd is free software; you can redistribute it and/or modify it \# under the terms of the GNU Lesser General Public License as published by \# the Free Software Foundation; either version 2.1 of the License, or \# (at your option) any later version. [Unit] Description=Daily Cleanup of Temporary Directories Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8) [Timer] OnBootSec=15min ## 开机15分钟后执行OnUnitActiveSec=1d ## 离上次执行服务1天后再次执行
通过设置配置文件并重新加载配置,使其生效。
sudo systemctl daemon-reload sudo systemctl enable --now systemd-tmpfiles-clean.timer
4.2 systemctl list-timer
查看剩余触发间隔,可以使用命令查看
systemctl list-timers | grep tmpfile Tue 2023-02-07 15:52:14 CST 23h left Mon 2023-02-06 15:52:14 CST 25min ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service
5 tmpfile配置文件的格式说明
以/usr/lib/tmpfiles.d/tmp.conf文件为例:
cat tmp.conf \# This file is part of systemd. \# systemd is free software; you can redistribute it and/or modify it \# under the terms of the GNU Lesser General Public License as published by \# the Free Software Foundation; either version 2.1 of the License, or \# (at your option) any later version. \# See tmpfiles.d(5) for details \# Clear tmp directories separately, to make them easier to override D /tmp 1777 root root - \#q /var/tmp 1777 root root 30d \# Exclude namespace mountpoints created with PrivateTmp=yes x /tmp/systemd-private-%b-* X /tmp/systemd-private-%b-*/tmp x /var/tmp/systemd-private-%b-* X /var/tmp/systemd-private-%b-*/tmp \# Remove top-level private temporary directories on each boot R! /tmp/systemd-private-* R! /var/tmp/systemd-private-*
解释:
type代表类型,path代表路径,mode代表权限,UID用户, GID用户组,AGE生存时间,Argument代表附加参数。
常见的type类型有:
类型 说明 f 如果文件不存在,则创建该文件。如果给出了参数参数,并且文件还不存在,它将被写入文件。不遵循符号链接。 F 创建或截断文件。如果给出了参数参数,它将被写入文件。不遵循符号链接。 d 创建目录。如果指定了模式和所有权,将进行调整。如果指定了age参数,则此目录的内容将进行基于时间的清理。 D 类似于d,但是在使用——remove时,目录的内容将被删除 v 如果路径还不存在,则创建子卷,文件系统支持子卷(btrfs),并且系统本身安装在子卷中(具体来说:根目录/本身就是子卷)。否则,创建一个普通目录,方法与d相同。 x 在清理过程中忽略路径。使用此类型可以排除由Age参数控制的清理路径。注意,这种类型的行不影响r或r行的效果。这种类型的行可以接受 X 在清理过程中忽略路径。使用此类型可以排除由Age参数控制的清理路径。与x不同的是,如果path是一个目录,此参数将不排除内容,而只排除目录本身。 r 删除存在的文件或目录。这可能不用于删除非空目录,使用R。这种类型的行接受shell样式的glob来代替正常的路径名。不遵循符号链接 R 递归地删除路径及其所有子目录(如果它是目录)。这种类型的行接受shell样式的glob来代替正常的路径名。不遵循符号链接。 z 调整访问模式、用户和组所有权,并恢复文件或目录的SELinux安全上下文(如果存在)。这种类型的行接受shell样式的glob来代替正常的路径名。不遵循符号链接。 Z 递归地设置访问模式、用户和组所有权,并恢复文件或目录(如果存在)及其子目录和其中包含的文件(如果适用)的SELinux安全上下文。 t 设置扩展属性。这种类型的行接受shell样式的glob来代替正常的路径名。这对于设置SMACK标签很有用。不遵循符号链接。 T 递归地设置扩展属性。这种类型的行接受shell样式的glob来代替正常的路径名。这对于设置SMACK标签很有用。不遵循符号链接。 … 更多选项使用命令 man 5 tmpfile 查看具体类型使用方法。
6 手动清理文件
手动清理临时文件
配置systemd-tmpfiles来清理/testtmp目录,这将确保目录不包含最近3天未使用过的文件。
可以复制示例配置/usr/lib/tmpfiles.d/tmp.conf文件并进行更新。
如下编辑文件:
$ sudo vim /etc/tmpfiles.d/testtmp.confSee tmpfiles.d(5) for details\# Clear tmp directories separately, to make them easier to overrideq /testtmp 1777 root root 3d如果要确保拥有正确所有权的直接性,请创建如下配置:d /run/testtmp 0700 root root 60s必须清除该目录中最近60秒钟内未使用的任何文件。创建文件后,使用以下命令确保文件包含适当的配置:sudo systemd-tmpfiles --create /etc/tmpfiles.d/testtmp.conf如果在输出中看不到任何错误,则表明配置设置正确,可以随时使用以下命令调用手动清理:systemd-tmpfiles --clean /etc/tmpfiles.d/testtmp.conf相关文章:
【Linux】tmpfile 使用介绍
tmpfile 使用介绍 1 介绍 很多情况下,需要系统自动识别/tmp、/var/tmp下的临时目录,并将其自动清理其中的过期文件。这个工具就是systemd-tmpfiles。 网上很多博客使用tmpwatchcron的方法来管理临时文件和临时存放文件的目录,在后期的版本…...
实现光线追踪重投影的方法
光线追踪重投影方法 重投影这项技术一般用于时间性帧复用技术上,例如TAA(Temporal Anti-Aliasing)反走样或者抗锯齿技术。读这篇文章最好先对TAA这类技术的算法流程有了解。 1.TAA抗锯齿技术简介 先简单介绍下TAA抗锯齿的原理,在游戏中,当前…...
Hyperbolic Representation Learning for CV
Contents Hyperbolic geometry[CVPR 2020] Hyperbolic visual embedding learning for zero-shot recognitionIntroductionApproachHyperbolic Label Embedding LearningHyperbolic Image Embedding LearningExperiment[CVPR 2020] Hyperbolic Image EmbeddingsIntroduction...
In Context Learning 相关分享
个人知乎详见 https://zhuanlan.zhihu.com/p/603650082/edit 1. 前言 随着大模型(GPT3,Instruction GPT,ChatGPT)的横空出世,如何更高效地提示大模型也成了学术界与工业界的关注,因此In-context learning…...
【前端笔试题一】:解析url路径中的query参数
前言 本文记录下在笔试过程中的前端笔试编程题目,会持续更新 1. 题目: 解析 url 路径中的 query 参数,比如:‘http://building/#/skeleton?serialNumber2023020818332821073&jobNo210347&target%7B%22a%22%3A%22b%22%2C…...
K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示
K_A12_001 基于STM32等单片机采集火光火焰传感参数串口与OLED0.96双显示一、资源说明二、基本参数参数引脚说明三、驱动说明IIC地址/采集通道选择/时序对应程序:四、部分代码说明1、接线引脚定义1.1、STC89C52RC火光火焰模块1.2、STM32F103C8T6火光火焰模块五、基础知识学习与相…...
Java基础42 枚举与注解
枚举与注解一、枚举(enumeration)1.1 自定义类实现枚举1.2 enum关键字实现枚举1.2.1 enum的注意事项1.2.2 enum的使用练习1.2.3 enum的常用方法1.2.4 enum的使用细节及注意事项1.2.5 enum练习二、注解(Annotation)2.1 Override&am…...
shell的变量和引用
文章目录二、变量和引用2.1 什么是变量2.2变量的命名2.3 变量的类型2.3.1 根据数据类型分类2.3.2 根据作用域分类2.4 变量的定义2.5 shell中的引用2.6 变量的运算练习:二、变量和引用 在程序设计语言中,变量是一个非常重要的概念。也是初学者在进行Shel…...
基于PHP的招聘网站
摘要在Internet高速发展的今天,我们生活的各个领域都涉及到计算机的应用,其中包括在线招聘的网络应用,在外国在线招聘已经是很普遍的方式,不过国内的在线招聘可能还处于起步阶段。招聘网站具有招聘信息功能的双向选择,…...
轻松使用 Python 检测和识别车牌(附代码)
车牌检测与识别技术用途广泛,可以用于道路系统、无票停车场、车辆门禁等。这项技术结合了计算机视觉和人工智能。 本文将使用Python创建一个车牌检测和识别程序。该程序对输入图像进行处理,检测和识别车牌,最后显示车牌字符,作为…...
DVWA—CSRF-Medium跨站请求伪造中级
注意: 1、这里对XSS(Stored)关卡不熟悉的可以从这里去看http://t.csdn.cn/ggQDK 2、把难度设置成 Medium 一、这一关同样我们需要埋下伏笔,诱使用户点击来提交,首先从XSS(Stored)入手。 注意:在前面介绍…...
【电商】后台订单生成
结合商品流转的电商系列介绍了一些了,商品已经采购入库、价格税率设置好了、活动及相关模板也已经准备完毕,下面就应该上架销售了,现在接着聊下订单的生成。 订单从产生到最终的关闭需要经历很多的环节,订单也是电商系统的核心数据…...
作为公司,这个5款在线软件工具赶紧安利起来!
2023年了 ,您的企业还没使用在线软件工具吗?自从用了在线工具之后,感觉打开了新办公世界的大门,效率蹭蹭蹭地往上涨啊。对于喜欢追求效率和便捷的我来说,在线实在是太棒了!今天安利几个非常不错的在线软件工…...
面试(七)为什么一般希望将析构函数定义为虚函数
class B { public:~B() // 基类析构函数不为虚函数{cout << "B::~B()" << endl;} };class D : public B { public:~D(){cout << "D::~D()" << endl;} };void Test(B* t) {delete t;t nullptr; }int main() {B *pb new B;Test…...
MySQL必会四大函数-时间函数
一、时间日期获取函数 获取当前日期(date)函数:curdate() mysql> select curdate(); 2023-02-09 获取当前时间(time)函数:curtime() select curtime(); 08:49:27 获取当前时间戳(date &…...
震惊!邻桌的程序猿做可视化报告竟然比我还快,带着好奇心我打开了他的电脑,发现惊天秘密,原因竟是...
其实,本文就是想分享一个做可视化的捷径! 制作可视化的方式有千千万。 Excel 控若能轻车熟路驾驭 VBA,能玩出各种花来,再不济借助图表插件外援也能秒杀一众小白选 手。 会编程的,Echarts 几十行代码,分分…...
mathtype7与word冲突,无法安装,不显示工具栏的问题解决
首先无法安装,或安装出错时,要清理注册表防止以后再次出现该问题,以此记录留作备份。打开注册表的方法是键盘winr键同时按(win就是Alt旁边像窗户图标的键),正常的话会跳出一个叫“运行”的家伙,…...
IBM AIX 升级Openssh 实现篇(编译安装)
升级成功佐证 !!!本文所有内容仅作参考,请在测试环境中具体测试完毕后才能应用于生产环境!!! [1]备份和恢复方案 开启telnet 服务,防止ssh 掉线后无法重连维护。在修复漏洞后关闭telnet。 备份该服务相关的所有文件,以便恢复。 root@TEST:/etc# vi inetd.conf #ftp…...
linux的睡眠框架及实现
睡眠 4 种模式:S2I (Suspend-to-Idle): 挂起系统,IO进入低功耗模式。需配置CONFIG_SUSPEND。Standby:执行S2I后,把AP (nonboot CPU) 离线。除了CONFIG_SUSPEND的支持外,还需要向suspend子系统注册ÿ…...
Java面试知识点
工作也有好些年了,从刚毕业到前几年看过无数的面试题,总想着自己写一个面试总结,随着自我认识的变化,一些知识点的理解也越来越不一样了。写下来温故而知新。很多问题可能别人也总结过,但是答案不尽相同,如…...
Python|GIF 解析与构建(5):手搓截屏和帧率控制
目录 Python|GIF 解析与构建(5):手搓截屏和帧率控制 一、引言 二、技术实现:手搓截屏模块 2.1 核心原理 2.2 代码解析:ScreenshotData类 2.2.1 截图函数:capture_screen 三、技术实现&…...
大话软工笔记—需求分析概述
需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...
Frozen-Flask :将 Flask 应用“冻结”为静态文件
Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是:将一个 Flask Web 应用生成成纯静态 HTML 文件,从而可以部署到静态网站托管服务上,如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...
页面渲染流程与性能优化
页面渲染流程与性能优化详解(完整版) 一、现代浏览器渲染流程(详细说明) 1. 构建DOM树 浏览器接收到HTML文档后,会逐步解析并构建DOM(Document Object Model)树。具体过程如下: (…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
