回答:
え?から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
3つのランダムな文字列に置き換えられます。このファイルは、特に指定しない限り削除されることはありません。「公式」一時ディレクトリ内のファイルのみ/tmp
がシステムによって自動的に削除されます。一時ファイルを指定するマジックビットは設定でき/tmp
ません。外部ファイルとそのファイルは自動的に削除されません。
あなたの主な質問に答えるために、消える可能性のあるファイルに依存することはもちろん奇妙です。だから人々はtmpファイルに依存せず、一時的にデータを保持するために作成されます。永続的なランダムな名前のファイルを作成する方法はたくさんあります。例えば:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
tmp
ディレクトリがクリアされるかではなく、作成されたファイルmktemp
が削除されるときを尋ねました。ご覧のとおり、この2つは必ずしも関連しているわけではありません:)。
一時ファイルは、システムの起動中またはTMPTIMEごとに削除される可能性があることに注意してください。にあるものをご覧ください/etc/cron.daily/tmpwatch
。
/var/tmp/
一方、通常は免疫がありtmpwatch
ます。
一時ファイルは(通常)短期間作成されます。それらは一時的な名前を持っているので、タイミング攻撃を実行するのは簡単ではなく、通常はプログラムで不要になったときに削除されます。通常、スクリプトはこのファイルを非常に短い期間保持し、通常はいくつかのテキストまたは他のファイルを処理し、不要になるとすぐに削除します。スクリプトがクラッシュする場合は、/ tmpフォルダーのハウスキーピングプロシージャにもフォールバックすることになります(配置することにした場合)。
一時ファイルを作成する必要はありません /tmp
mktemp
はどのディレクトリでも実行でき、単に任意のファイル名を生成するだけなので、これがどのように関係するのかわかりませんtmpwatch
。
mktemp
は、にファイルを作成します/tmp/
。
一時ファイルは、単独で消えることはありません。それらは一時ファイルと呼ばれます。スクリプトやセッションで、またはどこで作成しても、作業が完了したら削除することが期待されているからです。または、それがあなたのものであるならば、彼らを置いておいてください。mktempは、既存のファイルを上書きしないように、一意の名前のファイルを作成するためだけに存在します。
TMPTIME
?
/tmp
または他のtmpディレクトリのみ。ユーザーが作成したファイルをランダムに削除するだけではありません。
mktemp
は、にファイルを作成します/tmp/
。