使用 mktemp 创建的临时文件可以保存多长时间?

使用 mktemp 创建的临时文件可以保存多长时间?

我想知道用 mktemp 创建的临时文件可以保存多长时间。对我来说,依赖一个随时可能消失的文件似乎很奇怪。如果这很重要的话,我在使用 ubuntu。

答案1

嗯?来自man mktemp

DESCRIPTION
   Create  a  temporary  file  or directory, safely, and
   print its name.  TEMPLATE must  contain  at  least  3
   consecutive  `X's  in last component.  If TEMPLATE is
   not specified, use tmp.XXXXXXXXXX,  and  --tmpdir  is
   implied.   Files  are  created  u+rw, and directories
   u+rwx, minus umask restrictions.

mktemp只是添加一个随机字符串来创建一个唯一的文件名。没有人会自动将其删除。


由于似乎存在一些争论,让我们更详细地讨论一下。mktemp手册页指出

如果没有指定 TEMPLATE,--tmpdir则假定,如果--tmpdir没有指定,/tmp则假定。

这意味着只需运行mktemp就会创建一个名为tmp.RANDOM_STRING 在 /tmp 目录中。所以是的,运行mktemp没有参数将创建一个文件,该文件将与 中的其他所有内容一起以/tmp系统相关的方式清除。对于此类文件,$TMPTIME变量将很重要,如下面 Chris 的回答中所述。对于许多发行版,默认设置是/tmp每次启动时清除,因为$TMPTIME设置为0。在大多数(如果不是全部)发行版中,这是在文件中设置的/etc/default/rcS

$ grep TMPTIME /etc/default/rcS
TMPTIME=0

现在,如果你指定一个模板,例如,然后在当前目录中创建mktemp fooXXX一个名为的文件,其中用三个随机字符替换。fooXXXXXX除非您明确选择删除,否则此文件永远不会被删除。只有“官方”临时目录中的文件才会/tmp被系统自动删除,您无法设置指定临时文件的神奇位,外部文件/tmp及其同类文件不会被自动删除。

回答你的主要问题,依赖一个会消失的文件当然很奇怪,这就是为什么人们不依赖 tmp 文件,它们是为了临时保存数据而创建的,然后我们就可以忘记它们了。有很多方法可以创建一个持久的、随机命名的文件。例如:

echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt

答案2

请记住,临时文件可能会在系统启动期间或根据 TMPTIME 被删除。请查看 中的内容/etc/cron.daily/tmpwatch

/var/tmp/另一方面 通常 免疫tmpwatch

临时文件通常只在短时间内创建。它们有临时名称,因此不容易执行定时攻击,并且通常在程序不再需要它们时被删除。通常您的脚本会将此文件保留很短的时间,通常是处理一些文本或其他文件,并在不需要时立即将其删除。如果您的脚本崩溃,那么您也必须依靠 /tmp 文件夹管理程序(如果您决定将它们放在那里)。

您不必在/tmp

答案3

临时文件不会自行消失。它们之所以被称为临时文件,只是因为在您的脚本或会话中,或者在您创建它们的任何地方,您都需要在完成后删除它们。或者,如果您愿意,也可以让它们留在原地。mktemp 的存在只是为了让您想出一个具有独特名称的文件,这样它就不会覆盖某些现有文件。

相关内容