私はmktempで作成された一時ファイルが最後にどれくらい続くのかと思っていました。いつでも消える可能性のあるファイルに依存するのは、私には奇妙に思えます。それが重要であれば、私はubuntuにいます。
えっ? 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
のmanページには、
tEMPLATEが指定されていない場合は
--tmpdir
が想定され、--tmpdir
が指定されていない場合は/tmp
が想定されます。
つまり、単にmktemp
を実行すると、tmp.RANDOM_STRING
/ tmpディレクトリ内というファイルが作成されます。したがって、はい、パラメータなしでmktemp
を実行すると、/tmp
の他のすべてと一緒にシステム依存の方法でクリアされるファイルが作成されます。このようなファイルの場合、以下のChrisの回答で説明するように、$TMPTIME
変数が重要になります。多くのディストリビューションでは、/tmp
が$TMPTIME
に設定されているため、デフォルトではブートごとに0
がクリアされます。ほとんどではない(すべてではない)ディストリビューションでは、これは/etc/default/rcS
ファイルで設定されます。
$ grep TMPTIME /etc/default/rcS
TMPTIME=0
ここで、doにTEMPLATEを指定すると(例:mktemp fooXXX
)、現在のディレクトリにfooXXX
というファイルが作成されますここで、XXX
は3つのランダムな文字に置き換えられます。 このファイルは、特に選択しない限り削除されません。/tmp
などの「公式」一時ディレクトリ内のファイルのみがシステムによって自動的に削除されます。マジックビットはありません。一時ファイルを指定するように設定できます。/tmp
外のファイルとそのilkは自動的に削除されません。
あなたの主な質問に答えるために、もちろん、消えることのできるファイルに依存するのは奇妙です。そのため、人々はtmpファイルに依存せず、一時的にデータを保持するために作成され、その後、それらについて忘れることができます。永続的でランダムな名前のファイルを作成するには、多くの方法があります。例えば:
echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt
一時ファイルは、システムの起動時またはTMPTIMEに従って削除される可能性があることに注意してください。 /etc/cron.daily/tmpwatch
にあるものをご覧ください。
一方、/var/tmp/
は通常tmpwatch
の影響を受けません。
一時ファイルは(通常)短時間作成されます。それらは一時的な名前を持っているため、タイミング攻撃を実行するのは簡単ではなく、通常、プログラムで不要になったときに削除されます。通常、スクリプトはこのファイルを非常に短い期間保持し、通常は一部のテキストまたはその他のファイルを処理し、不要になったときにすぐに削除します。スクリプトがクラッシュする場合は、/ tmpフォルダーのハウスキーピングプロシージャにフォールバックする必要があります(その場所に配置することにした場合)。
/tmp
に一時ファイルを作成する必要はありません
一時ファイルが単独で消えることはありません。スクリプトやセッション、またはどこで作成する場合でも、完了したら削除することが期待されているため、これらは単に一時ファイルと呼ばれます。または、それがあなたのことであれば、それらを置いておいてください。 mktempは、既存のファイルを上書きしないように、一意の名前の付いたファイルを作成できるようにするためだけに存在します。