/tmp が存在することは保証されていますか?

/tmp が存在することは保証されていますか?

/tmpファイルに書き込む前にチェックと作成を行う必要がありますか?sudo rm -rf /tmpこれは非常にまれなケースなので、誰も実行していないと仮定します。

答え1

FHS存在する義務/tmpと同様にPOSIXしたがって、そこにあると信頼できます (少なくとも準拠システムではそうですが、実際には Unix 系システムではほぼ確実に存在します)。しかし、そうすべきではありません。システム管理者またはユーザーが一時ファイルの場所を他の場所に設定することを好む場合があります。複数のプラットフォームで正しい tmp ディレクトリを見つける詳細については。

答え2

実際には、/tmp存在することがほぼ保証されています。ただし、たとえ存在したとしても、そこに一時ファイルを置かなければならないわけではありません。

標準慣例では、環境変数を使用しますTMPDIR。環境変数が存在する場合、環境変数は一時ファイルのディレクトリを指します。環境変数が存在しない場合は、一時ファイルを に配置します/tmp

シェルスクリプトでは、"${TMPDIR:-/tmp}"一時ファイルの場所として を使用できます。これは、設定されている場合は の値に展開されTMPDIR、それ以外の場合は に展開されます。または、設定されていない場合は、次のコマンドを使用して条件付きで/tmp設定できます。TMPDIR

: "${TMPDIR:=/tmp}"

そして、内部に一時ファイルを作成します"$TMPDIR"

/tmpどのアプリケーションでも、またはの下にファイルを作成できることに注意してください$TMPDIR。さらに、このディレクトリはユーザー間で共有される可能性があるため、ファイルを作成するときは権限に注意する必要があります。多くのシステム(Linux、*BSD)には、コマンドmktemp適切なディレクトリに安全にファイルを作成します。mktemp一時ファイルやディレクトリを作成するときに使用するのが一般的に良い方法です。特に、シンボリックリンク攻撃の可能性があるために共有ディレクトリに安全にファイルを作成することができないシェル スクリプトからの場合はそうです (mkdirエラーを正しく処理すれば問題ありません)。

¹空でないこと — 変数が空の場合、そのままでは使用できないため、ファイル名を格納する必要がある場合は、空または未設定の変数を同様に扱うのが一般的に良いでしょう。

答え3

存在する可能性は高いですが、別の理由から確認する必要があります。それは、存在するとは限らないからです。大きい多くのシステムでは、/tmpディスクではなく RAM によってバックアップされており、数 GB に制限される可能性があります。(Fedora システムでは、デフォルトで RAM の半分です。) したがって、存在するかどうかだけでなく、そこに保存する予定のものを保存する余地があるかどうかを確認する必要があります。

大きいものの場合は を使用してください/var/tmp/

関連情報