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)
请记住,临时文件可能会在系统启动期间或根据 TMPTIME 被删除。请看看你有什么/etc/cron.daily/tmpwatch。
/var/tmp/另一方面是免疫通常tmpwatch。
临时文件是为(通常)很短的时间段创建的。它们有临时名称,因此不容易执行定时攻击,通常在程序不再需要时将它们删除。通常你的脚本会保留这个文件很短的时间,通常处理一些文本或其他文件,一旦不需要它就会删除它。如果您的脚本会崩溃,那么您也将回退到 /tmp 文件夹内务处理程序(如果您决定将它们放在那里)。
您不必在其中创建临时文件 /tmp
| 归档时间: |
|
| 查看次数: |
16643 次 |
| 最近记录: |