mktempで作成された一時ファイルの有効期間はどれくらいですか?


20

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

回答:


17

え?から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現在のディレクトリに作成されたXXX3つのランダムな文字列に置き換えられます。このファイルは、特に指定しない限り削除されることはありません。「公式」一時ディレクトリ内のファイルのみ/tmpがシステムによって自動的に削除されます。一時ファイルを指定するマジックビットは設定でき/tmpません。外部ファイルとそのファイルは自動的に削除されません。

あなたの主な質問に答えるために、消える可能性のあるファイルに依存することはもちろん奇妙です。だから人々はtmpファイルに依存せず、一時的にデータを保持するために作成されます。永続的なランダムな名前のファイルを作成する方法はたくさんあります。例えば:

echo "foo" > $RANDOM.txt
echo "foo" > `mktemp fooXXX.txt`
echo "foo" > $$.txt

2
これは私の質問に答えません。それは「一時的な」ファイルを作成し、それがどのくらい続くかについての情報を与えないと言います。それで永遠に続くの?tmpディレクトリはシステムの起動時に永続化されますか?
MYV

@Maksimは更新された回答を参照してください。また、あなたの質問は、いつtmpディレクトリがクリアされるかではなく、作成されたファイルmktempが削除されるときを尋ねました。ご覧のとおり、この2つは必ずしも関連しているわけではありません:)。
テルドン

6

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

/var/tmp/一方、通常は免疫がありtmpwatchます。

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

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


as mktempはどのディレクトリでも実行でき、単に任意のファイル名を生成するだけなので、これがどのように関係するのかわかりませんtmpwatch
テルドン

1
デフォルトでmktempは、にファイルを作成します/tmp/
クリス

テンプレートを提供しない場合にのみ、更新された回答を参照してください。
テルドン

1

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


一部のシステムではTMPTIME
おとなしそうな

@demure yes。ただし、クリア/tmpまたは他のtmpディレクトリのみ。ユーザーが作成したファイルをランダムに削除するだけではありません。
テルドン

デフォルトでmktempは、にファイルを作成します/tmp/
クリス
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.