/tmp目录如何清理?它是自动的吗?如果是这样,它多久清理一次?

评论

我的临时文件永远不会写入磁盘。它们被写入RAM磁盘。我确实将tmpfs / tmp tmpfs默认值,noatime,mode = 1777 0 0放在/ etc / fstab中。

相关:serverfault.com/questions/377348/when-does-tmp-get-cleared / ...

#1 楼

注意!从至少ubuntu 14.04开始,此答案已过时。查看当前情况的其他答案,如果证明正确,则大肆投票。还要发表评论,以便我可以在此处链接到当前正确的答案。

对于14.04,请参见https://askubuntu.com/a/759048/1366

对于16.10,请参见https ://askubuntu.com/a/857154/453746


2011年的旧答案:

清理/tmp是由新贵脚本/etc/init/mounted-tmp.conf完成的。每次安装/tmp时,脚本由upstart运行。实际上,这意味着每次启动。

脚本大致执行以下操作:如果/tmp中的文件早于$TMPTIME天,它将被删除。

$TMPTIME的默认值为0,这意味着删除/tmp中的每个文件和目录。 $TMPTIME是在/etc/default/rcS中定义的环境变量。

评论


14.04不再适用(该脚本不再存在)。

–马丁·施罗德(MartinSchröder)
16年4月19日在12:02

@MartinSchröder-该脚本存在于我的系统上,它是14.04的全新安装,并且tmpreaper不存在!

–兰斯·霍兰(Lance Holland)
16年6月17日在13:18

我现在正在使用Arch Linux,因此无法验证。抱歉。请有人验证并评论或编辑我的答案。

– Lesmana
16年6月18日在12:31

在ubuntu 16.04中,tmpreaper因不安全而被放弃,请参阅:fossies.org/linux/tmpreaper/debian/README.security

– Tamerlaha
16-10-27在15:14

不可以。在Ubuntu 16.04中,它已被系统机制简单地取代。阅读该文档,您会发现实际上是对为什么声称不安全的安全分析存在缺陷的解释。

– JdeBP
18-09-16在9:40

#2 楼

默认情况下,每次引导时都会清除该目录,因为TMPTIME默认情况下为0。

您可以在以下文件中更改时间:

/etc/default/rcS


TMPTIME说在几天之内清除tmp dir的频率如何

评论


对于从不重启的机器(例如服务器),每次引导清除都不理想。我的/ tmp中有超过500,000个文件占用5 Gb空间,因为我的服务器具有378天的正常运行时间。我不愿意重新启动它,只是因为重新启动时清除这些文件需要几个小时。

– rjmunro
2012年1月25日上午11:47

在您的情况下,您应该给tmpreaper一个机会。

– qbi
13年2月24日在23:01

CRON工作可以轻松解决该问题。

–肯·夏普
2014年8月8日14:27

而且tmpwatch应该是一个合适的工具。

– ArekBulski
15-10-28在12:29

看来Ubuntu / systemd已经提供了解决方案。我会说更多,但是...。

–肯·夏普
17年5月13日在7:50

#3 楼

虽然/tmp文件夹不是长期存储文件的位置,但有时您希望保留的时间比下次重新引导的时间长一些,这是Ubuntu系统上的默认设置。我知道有一两次,我在测试过程中已将某些内容下载到/tmp,进行了更改后重新启动,然后再次丢失了原始数据。如果您想将/tmp文件保留更长的时间,可以更改此设置。

更改/tmp清除频率

告诉系统清除/tmp的默认设置。重新启动时将保存在/etc/default/rcS文件中。我们将看到的值是TMPTIME

TMPTIME=0的当前值表示,无论文件寿命如何,在重新启动时删除文件。将此值更改为其他(正)数字将更改文件在/tmp中可以生存的天数。

TMPTIME=7


此设置将允许文件保留在/tmp中,直到它们已经使用了一周,然后在下次重新启动时将其删除。负数(TMPTIME=-1)告诉系统不要删除/tmp中的任何内容。这可能不是您想要的,但是可用。

评论


很好的解释。但是cleanup命令在哪个脚本中?我已经看过/etc/init/mount-temp.conf,但是它在已挂载的MOUNTPOINT = / tmp上有行开始,这使我认为它不适用。

– Enzotib
2011年1月9日19:56

如果您不想自动删除文件,请将其放在/ var / tmp而不是/ tmp中。

–吉尔斯'所以-不再是邪恶的'
2011年1月10日21:29

当计算机崩溃(可能是由于OOM)而导致您不希望丢失的文件(渲染的视频帧)时,保留文件也很方便。当然,更好的解决方案是解决问题。 :-)

–肯·夏普
2014年8月8日在14:28

可以在Cygwin内部完成吗?

– CMCDragonkai
2014年5月14日晚上8:19

#4 楼

我正在Ubuntu 16.10上进行检查。我可以证明,编辑/ etc / default / rcS不再起作用,并且无论您放入该文件什么内容,tmp中的文件都将通过重新启动来清除。正如其他人提到的那样,不再使用tmpreaper。

我认为正确的答案是Ubuntu 16.10具有新的设置。在手册页“ tmpfiles.d”中记录了一个文件夹/etc/tmpfiles.d。在该文件夹中,应该放置一个配置文件来控制是否要删除/ tmp。这是我要执行的操作,以停止从/ tmp中擦除文件的重启,除非它们已存在20天:

#/etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 20d


如果您从未将“ 20d”替换为“-”想要删除文件。这是我的最大努力,手册页几乎没有细节。

新设置的优点是,即使不重新启动系统,文件清理器仍然可以运行(例如始终在服务器上)。我认为这是一大优势。

评论


man tmpfiles.d

–马丁·施罗德(MartinSchröder)
17年4月15日在1:52

我发现您可以使用连字符保留原始文件的权限和所有者:d / tmp /---20d

–戴夫·亚伍德(Dave Yarwood)
18年5月22日在15:38

同样值得注意的是:您可以通过手动运行清理作业来测试配置:systemctl start systemd-tmpfiles-clean

–戴夫·亚伍德(Dave Yarwood)
18年5月22日在15:38

@kapad:我刚刚验证了它也可以在Ubuntu 18.04上运行。

–Gene Vincent
18/12/6在8:52

创建/etc/tmpfiles.d/tmp.conf会覆盖/usr/lib/tmpfiles.d/tmp.conf,如果不复制该目录,则会丢失其他目录的配置(例如/ var / tmp / systemd-private- %b- *)。参见源。

– MihaiCapotă
19年8月23日在19:14



#5 楼

在Ubuntu 14.04中,此操作由tmpreaper完成,cron每天都会调用它(来自/etc/cron.daily)。可以通过/etc/default/rcS/etc/tmpreaper.conf来配置程序。

评论


在我的系统上,tmpreaper不在/etc/cron.daily中,但是我可以使用apt-get安装它

–乔·格姆斯卡(Joe Germuska)
17年11月3日,19:46

注意:请勿在16和18上安装tmpreaper,因为b / c具有内置系统

– Jitbit
20 Mar 22 '20在9:34

#6 楼

14.04之前的版本:
每次重新启动时都会清理。

评论


与14.04+一起显示时,它仅使用tmpreaper,而不使用“每次启动”脚本FWIW

–rogerdpack
16-9-8的16:03



我的14.04系统都在重新启动时清理。甚至从未听说过tmpreaper。

–肯·夏普
17年5月13日在7:51

如果您从不重启系统怎么办?

–phuclv
17年5月5日在11:37

#7 楼

systemd Ubuntu(15.10及更高版本)中,这是通过systemd使用systemd-tmpfiles-clean服务和计时器完成的:

$ systemctl cat systemd-tmpfiles-clean.service 
# /lib/systemd/system/systemd-tmpfiles-clean.service
#  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=Cleanup of Temporary Directories
Documentation=man:tmpfiles.d(5) man:systemd-tmpfiles(8)
DefaultDependencies=no
Conflicts=shutdown.target
After=local-fs.target time-sync.target
Before=shutdown.target

[Service]
Type=oneshot
ExecStart=/bin/systemd-tmpfiles --clean
IOSchedulingClass=idle




$ systemctl cat systemd-tmpfiles-clean.timer  
# /lib/systemd/system/systemd-tmpfiles-clean.timer
#  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
OnUnitActiveSec=1d


因此,systemd-tmpfiles-clean会在关机时运行,否则每天运行一次。可以使用另一个答案中提到的/etc/tmpfiles.d扩展它清理的文件。

您可以使用systemctl edit systemd-tmpfiles-clean.timer和各种系统化的Timer配置选项(请参阅man 5 systemd.timer)来更改计时器行为本身。

评论


我将计时器更改为20分钟,并且看到状态命令显示它实际上正在使用20分钟配置。但是我的问题是/ tmp仍然没有清理。我需要将其清理干净。即使手动启动sudo systemctl启动systemd-tmpfiles-clean也不能解决问题。有什么想法吗?

–user2932688
19-6-27在13:34



#8 楼

在运行Ubuntu的一台服务器上,我们有一个脚本来删除/ tmp中的文件,并且该脚本每晚运行。

脚本是:

#!/bin/sh
# Clean file and dirs more than 3 days old in /tmp nightly

/usr/bin/find /tmp -type f -atime +2 -mtime +2  |xargs  /bin/rm -f &&

/usr/bin/find /tmp -type d -mtime +2 -exec /bin/rm -rf '{}' \; &&

/usr/bin/find /tmp -type l -ctime +2 |xargs /bin/rm -f &&

/usr/bin/find -L /tmp -mtime +2 -print -exec rm -f {} \;


只需将以上内容保存到文件chmod 775中,然后创建一个cron条目即可运行它。由于这是Web服务器,出于明显的原因,我们不想重新启动它。

评论


使用tmpwatch可能会更好。

–池
2011-09-28 4:59

最后一行非常危险。通常,每个人都可以运行ln -s / usr / tmp / kaboom甚至ln -s / * / tmp / ...

–丹尼尔·奥尔德(Daniel Alder)
16-2-28在22:25