我想知道用 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
一个名为的文件,其中用三个随机字符替换。fooXXX
XXX
除非您明确选择删除,否则此文件永远不会被删除。只有“官方”临时目录中的文件才会/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 的存在只是为了让您想出一个具有独特名称的文件,这样它就不会覆盖某些现有文件。