web-dev-qa-db-ja.com

mktempで作成された一時ファイルはどのくらい持続しますか?

私はmktempで作成された一時ファイルが最後にどれくらい続くのかと思っていました。いつでも消える可能性のあるファイルに依存するのは、私には奇妙に思えます。それが重要であれば、私はubuntuにいます。

20
MYV

えっ? 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
17
terdon

一時ファイルは、システムの起動時またはTMPTIMEに従って削除される可能性があることに注意してください。 /etc/cron.daily/tmpwatchにあるものをご覧ください。

一方、/var/tmp/は通常tmpwatchの影響を受けません。

一時ファイルは(通常)短時間作成されます。それらは一時的な名前を持っているため、タイミング攻撃を実行するのは簡単ではなく、通常、プログラムで不要になったときに削除されます。通常、スクリプトはこのファイルを非常に短い期間保持し、通常は一部のテキストまたはその他のファイルを処理し、不要になったときにすぐに削除します。スクリプトがクラッシュする場合は、/ tmpフォルダーのハウスキーピングプロシージャにフォールバックする必要があります(その場所に配置することにした場合)。

/tmpに一時ファイルを作成する必要はありません

6
Chris

一時ファイルが単独で消えることはありません。スクリプトやセッション、またはどこで作成する場合でも、完了したら削除することが期待されているため、これらは単に一時ファイルと呼ばれます。または、それがあなたのことであれば、それらを置いておいてください。 mktempは、既存のファイルを上書きしないように、一意の名前の付いたファイルを作成できるようにするためだけに存在します。

1
EBGreen