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


20

我想知道用mktemp创建的临时文件持续多长时间。对我来说,依赖随时可能消失的文件似乎很奇怪。如果有关系,我在ubuntu上。

Answers:


17

??来自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则假定。

这意味着只需运行即可在/ tmp目录中mktemp创建一个文件。因此,是的,不带参数运行将创建一个文件,该文件将以与系统有关的方式与其他所有文件一起清除。对于此类文件,变量将很重要,如下面克里斯的答案所述。对于许多发行版,默认设置是清除每次引导,因为它设置为。在大多数(如果不是全部)发行版中,这是在文件中设置的:tmp.RANDOM_STRING mktemp/tmp$TMPTIME/tmp$TMPTIME0/etc/default/rcS

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

现在,例如,如果确实指定了TEMPLATE,mktemp fooXXX则将fooXXX在当前目录中创建一个名为的文件,该文件XXX将被三个随机字符替换。除非您特别选择删除此文件,否则将永远不会删除该文件。系统只会/tmp自动删除“正式”临时目录中的文件,例如,系统不会自动删除它们,您无法设置任何指定临时文件的魔术位,外部文件/tmp及其类似文件不会被自动删除。

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

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

2
这没有回答我的问题。它说它会创建一个“临时”文件,并且没有提供持续时间的信息。所以它永远持续下去?tmp目录在系统启动时是否被伪造?
MYV

@Maksim看到更新的答案。另外,您的问题不是询问何时tmp清除目录,而是询问何时mktemp删除使用创建的文件。如您所见,两者不一定是相关的:)。
2013年

6

请记住,临时文件可能会在系统启动过程中或按照TMPTIME删除。请查看您所拥有的/etc/cron.daily/tmpwatch

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

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

您无需在以下位置创建临时文件 /tmp


看起来mktemp可以在任何目录中运行并且仅产生一个任意文件名,我看不出它与做什么有任何关系tmpwatch

1
默认情况下,在中mktemp创建文件/tmp/
克里斯,

仅当您不提供模板时,请参阅我的最新答案。
2013年

1

临时文件不会自行消失。它们之所以称为临时文件,仅仅是因为在您的脚本或会话中,或者在进行它们的任何地方,都应在完成后将其删除。或者,如果那是您的事,请让他们躺在周围。mktemp的存在仅仅是为了让您提出一个具有唯一性的文件,以便它不会覆盖某些现有文件。


某些系统不使用TMPTIME吗?
娴静

@demure是,但仅清除/tmp或其他tmp目录。它不仅会随机删除用户创建的文件。

默认情况下,在中mktemp创建文件/tmp/
克里斯,
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.