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

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

/tmpファイルに書き込む前にファイルを確認して生成する必要がありますか?sudo rm -rf /tmpこれは非常にまれなので、誰も逃げることができないと仮定します。

答え1

これFHS既存のコマンド/tmpPOSIXしたがって、その存在に依存する可能性があります(少なくとも互換性のあるシステムでは可能ですが、実際にはUnixファミリーシステムではほとんど保証されています)。しかし、これをしてはいけません。システム管理者またはユーザーは、一時ファイルに別の場所を使用することを好むかもしれません。バラより複数のプラットフォームで正しいtmpディレクトリを見つける詳細については。

答え2

実際には/tmp確かにそうです。しかし、存在しても、そこに一時ファイルを入れなければならないという意味ではありません。

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

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

: "${TMPDIR:=/tmp}"

次に、その中に一時ファイルを作成します"$TMPDIR"

すべてのアプリケーションは、/tmpまたは下にファイルを作成できます$TMPDIR。また、ディレクトリはユーザー間で共有される可能性があるため、ファイルの作成時の権限について知っておく必要があります。多くのシステム(Linux、* BSD)には次のコマンドがあります。mktemp正しいディレクトリにファイルを安全に作成します。通常、これを使用して一時ファイルとディレクトリを作成することをお勧めしますmktemp。特に、共有ディレクトリにファイルを作成することは、可能なシンボリックリンク攻撃のために安全に実行できないシェルスクリプトでそうです(mkdirエラーが正しく処理されたら大丈夫です)。

空でない場合 - 変数が空の場合、とにかく使用できません。空の変数や未設定の変数にファイル名を含める必要がある場合は、通常同じ方法で処理するのが最善です。

答え3

存在する可能性が非常に高いですが、確認する必要がある別の理由があります。存在するという保証はありません。大きい。多くのシステムでは、/tmpこれはディスクではなくRAMとしてサポートされており、数GBに制限される可能性があります。 (Fedoraシステムでは基本的にRAMの半分です。)したがって、RAMが存在するかどうかを確認する必要があるだけでなく、どのようなスペースがあるかを確認する必要があります。

大きい方があれば を使用してください/var/tmp/

関連情報