Answers:
??来自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
$TMPTIME
0
/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
tmp
清除目录,而是询问何时mktemp
删除使用创建的文件。如您所见,两者不一定是相关的:)。
请记住,临时文件可能会在系统启动过程中或按照TMPTIME删除。请查看您所拥有的/etc/cron.daily/tmpwatch
。
/var/tmp/
另一方面通常对免疫tmpwatch
。
临时文件(通常)创建时间很短。它们具有临时名称,因此执行定时攻击并不容易,通常在程序不再需要它们时将其删除。通常,脚本会将该文件保留很短的时间,通常会处理一些文本或其他文件,并且在不需要时会立即将其删除。如果您的脚本崩溃,那么您也将使用/ tmp文件夹内务处理程序(如果您决定将它们放在那里)。
您无需在以下位置创建临时文件 /tmp
mktemp
可以在任何目录中运行并且仅产生一个任意文件名,我看不出它与做什么有任何关系tmpwatch
。
mktemp
创建文件/tmp/
。