用 mktemp 制作的临时文件能保存多久?

MYV*_*MYV 25 linux unix ubuntu

我想知道用 mktemp 创建的临时文件能持续多久。依赖一个随时可能消失的文件对我来说似乎很奇怪。如果重要的话,我在 ubuntu 上。

ter*_*don 20

嗯?来自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.
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

现在,如果您确实指定了一个 TEMPLATE,例如,mktemp fooXXX则会fooXXX在当前目录中创建一个名为的文件,该文件XXX被三个随机字符替换。除非您特别选择这样做,否则永远不会删除此文件。只有/tmp系统会自动删除“官方”临时目录中的文件,例如,您没有可以设置指定临时文件的魔术位,不会自动删除外部文件/tmp等。

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

echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
Run Code Online (Sandbox Code Playgroud)

  • 这不能回答我的问题。它说它制作了一个“临时”文件,并且没有提供关于它持续多长时间的信息。所以它是永恒的吗?tmp 目录是否在系统启动时被破坏? (2认同)
  • @Maksim 查看更新的答案。另外,您的问题没有询问何时清除“tmp”目录,而是询问何时删除使用“mktemp”创建的文件。正如你所看到的,两者没有必然的联系:)。 (2认同)

Chr*_*ris 8

请记住,临时文件可能会在系统启动期间或根据 TMPTIME 被删除。请看看你有什么/etc/cron.daily/tmpwatch

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

临时文件是为(通常)很短的时间段创建的。它们有临时名称,因此不容易执行定时攻击,通常在程序不再需要时将它们删除。通常你的脚本会保留这个文件很短的时间,通常处理一些文本或其他文件,一旦不需要它就会删除它。如果您的脚本会崩溃,那么您也将回退到 /tmp 文件夹内务处理程序(如果您决定将它们放在那里)。

您不必在其中创建临时文件 /tmp

  • 默认情况下,`mktemp` 在`/tmp/` 中创建文件。 (2认同)