/tmp
目录如何清理?它是自动的吗?如果是这样,它多久清理一次? #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
评论
我的临时文件永远不会写入磁盘。它们被写入RAM磁盘。我确实将tmpfs / tmp tmpfs默认值,noatime,mode = 1777 0 0放在/ etc / fstab中。相关:serverfault.com/questions/377348/when-does-tmp-get-cleared / ...