Answers:
回答问题:
/tmp
应该被自动清空:是的/tmp
定期手动删除文件:不,您的系统会处理这些文件。如果您可能会问自己:
/tmp
出于任何原因(需要空间,想要删除痕迹等)从其中删除文件吗:取决于,请继续阅读。文件系统层次结构标准(FHS)指出:
必须使/ tmp目录可用于需要临时文件的程序。
程序不得假定在两次调用之间都保留/ tmp中的任何文件或目录。
/var/tmp/
具有类似的用途,但是在重新引导期间一定不能删除它。
它不保证该/tmp/
或/var/tmp/
定期进行清理。尽管大多数系统会不定期进行清理,但这可能取决于您的发行版和设置。见注释通过mike
。
如果需要删除/ tmp中的文件,请首先查看该文件是否正在使用中。您可以轻松地做到这一点:
lsof /tmp/file_to_delete
如果您有权这样做,将显示持有该文件句柄的进程,例如进程名称,PID和文件类型。要显示所有进程,请sudo
在root用户之前添加或运行。
lsof +D /tmp
将显示/tmp
(+D
)下当前打开的目录中的所有文件。当然,您不应该删除这些文件。
实际上,当您删除仍处于打开状态的文件时(如果您有权这样做),该文件将无法从文件系统名称空间访问,但是对于具有打开文件句柄的进程而言,该文件仍然存在。关闭该句柄后,该进程将无法再访问该文件,如果没有进程再打开该文件,则最终将其删除。进程不应假定该文件在后续open
调用之间仍然存在,但是程序员草率,而且您永远不会知道。因此,删除某些程序仍在使用的文件并不是很聪明。
我认为这取决于操作系统。我以为/ tmp通常在重新启动时清除,实际上,系统在会话中清理自身并不安全,因为它不知道哪些文件处于活动状态。
如果您很勇敢,则可能想将命令删除到crontab中,该命令将删除早于特定年龄的文件,但是如果它删除仍在使用的文件,则可能会引起一些问题。您可以尝试一个命令(我没有尝试过),例如
找到/ tmp -type f -ctime +10 -exec rm {} +
理论上,这会删除10天之前/ tmp下的所有文件。
-r
一下
/ tmp和/ var / tmp目录按正常时间表进行清理。这可能取决于您的发行版。在我的CentOS系统(RedHat的一个克隆)上,有一个cron作业计划每天运行一次tmpwatch(tmp目录清除程序)。/ var / tmp中的文件比/ tmp /中的文件保留更长的时间。我还看到了在重新启动时修剪/ tmp(但不是/ var / tmp)的脚本,因为所有进程都是新的,因此知道没有什么可以使该文件保持打开状态。
因此,是的,/ tmp具有基本脚本的维护功能。它仍然可以在那些维护时间之外填满。如果您选择手动清理,最好的sysadmin做法是要小心。Sysadmin知识讨论了/ tmp中的符号链接,这些符号链接指向n00b sysadmins运行简单find
脚本时已删除的必要系统文件。
在CentOS上有一个/etc/cron.daily
名为的工作tmpwatch
,它将以递归的方式删除在给定时间内未访问过的文件。通常,它用于清理用于临时存放空间的目录,例如/ tmp。
这是/etc/cron.daily/tmpwatch
脚本
#!/ bin / sh 标志= -umc / usr / sbin / tmpwatch“ $ flags” -x /tmp/.X11-unix -x /tmp/.XIM-unix \ -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \ -X'/ tmp / hsperfdata_ *'10d / tmp / usr / sbin / tmpwatch“ $ flags” 30d / var / tmp 对于/ var / {cache / man,catman} / {cat?,X11R6 / cat?,local / cat?}中的d;做 如果[-d“ $ d”]; 然后 / usr / sbin / tmpwatch“ $ flags” -f 30d“ $ d” 科幻 做完了
/tmp
仅在系统重新引导时,目录内容才会被删除,因为正在运行的进程可能已从该目录访问文件。
您可以从中删除内容/tmp/
;但是这样做的问题在于,如果您有一个定期写入的服务/tmp/
并删除了文件,则可能会使服务崩溃或中断,直到重新启动为止。
如果您正在运行Debian(或类似Ubuntu的衍生版本),则应查看/ etc / default / rcS 文件并调整TMPTIME
环境变量。根据定义,/ tmp中的内容在下次重新启动时与此处无关。
我建议
TMPTIME
在服务器上使用变量分发当然有所不同,但是我希望临时文件可以由系统自动管理。他们可能会使用cron作业或systemd-tmpfiles-clean服务。如果您担心磁盘空间,这是查看每个根文件夹占用的空间的有用命令:
du -hs /* | sort -h
要查看您的系统是否使用systemd服务来管理临时文件,您可以尝试:
systemctl status systemd-tmpfiles-clean
在底部,您会看到类似以下的内容,它告诉您上次运行服务的时间:
systemd-tmpfiles-clean.service - Cleanup of Temporary Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.service; static; vendor preset: disabled)
Active: inactive (dead) since Wed 2018-07-18 15:43:36 IST; 18h ago
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
Process: 30495 ExecStart=/usr/bin/systemd-tmpfiles --clean (code=exited, status=0/SUCCESS)
Main PID: 30495 (code=exited, status=0/SUCCESS)
Jul 18 15:43:36 host-name systemd[1]: Starting Cleanup of Temporary Directories...
Jul 18 15:43:36 host-name systemd[1]: Started Cleanup of Temporary Directories.
请注意,该服务将在清理完成后立即退出。计时器服务负责定期触发它。您可以使用以下方法进行检查:
systemctl status systemd-tmpfiles-clean.timer
并且您应该期望如下所示:
systemd-tmpfiles-clean.timer - Daily Cleanup of Temporary Directories
Loaded: loaded (/usr/lib/systemd/system/systemd-tmpfiles-clean.timer; static; vendor preset: disabled)
Active: active (waiting) since Tue 2018-07-03 10:56:59 IST; 2 weeks 1 days ago
Docs: man:tmpfiles.d(5)
man:systemd-tmpfiles(8)
Jul 03 10:56:59 host-name systemd[1]: Started Daily Cleanup of Temporary Directories.
Jul 03 10:56:59 host-name systemd[1]: Starting Daily Cleanup of Temporary Directories.
如果您再次查看负责清理文件的实际服务,您会看到它已执行的所有操作:
/usr/bin/systemd-tmpfiles --clean
因此,您可以直接运行该命令,也可以正确执行以下命令:
systemctl start systemd-tmpfiles-clean
它将为您的系统运行适当的命令。但是,您应该注意,这不是“立即删除所有临时文件”命令。有几个配置文件可控制实际删除的内容以及删除的时间,以便应用程序可以分别配置其临时文件。
寻找临时文件通用处理的地方/usr/lib/tmpfiles.d/tmp.conf
可能是以下几行:
# Clear tmp directories separately, to make them easier to override
v /tmp 1777 root root 10d
v /var/tmp 1777 root root 30d
如果您的系统空间不足,可以将时间更改为更短的时间,例如:
v /tmp 1777 root root 12h
v /var/tmp 1777 root root 1d
为了确定您在做什么,请man tmpfiles.d
阅读本手册。再次,我发现这里介绍的方法与CentOS(基于RedHat)和Ubuntu系统有关,但是我对其他发行版了解不多。
/tmp
在重新启动后会被清除,但这取决于安装在那里的文件系统。什么df -h
发言权?