スポンサーリンク

MKTEMP(1) FreeBSD 一般コマンドマニュアル MKTEMP(1)

名称

mktemp − (ユニークな) 一時ファイル名を作成する

書式

mktemp [−d] [−q] [−t prefix] [−u] template ...

mktemp [−d] [−q] [−u] −t prefix

解説

mktemp ユーティリティは、引数のファイル名テンプレートの一つ一つに対して、 その一部を上書きすることにより、ファイル名を生成します。このファイル名は ユニークであり、アプリケーションが使用するのに適しています。テンプレート は、いくつかの ‘X’ が後続する任意のファイル名であり、例えば /tmp/temp.XXXX です。後続する ‘X’ は、現在のプロセス番号やユニークな文字 の組み合わせと置き換えられます。 mktemp が返すことが可能なユニークなファ イル名の数は、指定した ‘X’ の数に依存します; ‘X’ を 6 つ指定した場合に は、およそ 26 ** 6 の組み合わせを mktemp が扱えることとなります。

mktemp がユニークなファイル名を生成することに成功した場合、ファイルがモー ド 0600 ( −u フラグ未指定時) で作成され、ファイル名が標準出力に出力されま す。

−t prefix オプション指定時には、 mktemp はテンプレート文字列を prefix と、 TMPDIR 環境変数が設定されていればそれも用いて生成します。 TMPDIR が 設定されていない場合の、デフォルトの場所は /tmp です。ユーザが指定したか もしれない環境変数の使用が適切であると保証できるかどうかに注意を払ってく ださい。

1 回の起動でいくつでも一時ファイルを作ってかまいません。これには、 −t フ ラグの結果の内部テンプレートをもとにするものひとつも含まれます。

mktemp ユーティリティは、シェルスクリプトが安全に一時ファイルを使用するた めに提供されています。伝統的に多くのシェルスクリプトが、プログラム名に pid を付けた名前を一時ファイル名として使用しています。この種の命名法は予 測されうるので、レース状態となった場合に容易に攻撃者が勝ってしまいます。 より安全、しかしながらまだ劣ったアプローチとして、同じ命名法でディレクト リを作るというものがあります。この方法では一時ファイルが壊されないことを 保証できますが、単純なサービス停止攻撃を許してしまいます。上記のような理 由により、 mktemp の使用をお勧めします。

オプション

使用可能なオプションを以下に示します:

       −d

ファイルではなくディレクトリを作成します。

−q
エラーが発生した場合、黙って失敗します。エラー出力が標準エラーに 出力されることが望ましくないスクリプトで有用です。

−t prefix
ファイル名テンプレートを生成するために必要なテンプレートを生成し ます (与えられた prefix と、設定されている場合には TMPDIR を使用 します)。

−u
‘‘安全ではない’’ モードで操作します。一時ファイルは mktemp が終了 する前にアンリンクされます。これは mktemp(3) よりは少しましです が、依然レース状態を引き起こします。このオプションの使用はお勧め しません。

診断

mktemp ユーティリティは、成功時には値 0 で終了します。失敗時には値 1 で終 了します。

使用例

以下の sh(1) スクリプトの一部で、 mktemp の簡単な使用方法を説明します。こ のスクリプトは、安全な一時ファイルを取得できない場合には終了します。

      tempfoo=‘basename $0‘
      TMPFILE=‘mktemp /tmp/${tempfoo}.XXXXXX‘ || exit 1
      echo "program output" >> $TMPFILE

$TMPDIR を使用する場合には次のようにします:

      tempfoo=‘basename $0‘
      TMPFILE=‘mktemp -t ${tempfoo}‘ || exit 1
      echo "program output" >> $TMPFILE

次の場合、スクリプト自身でエラーをつかまえます。

      tempfoo=‘basename $0‘
      TMPFILE=‘mktemp -q /tmp/${tempfoo}.XXXXXX‘
      if [ $? -ne 0 ]; then

echo "$0: Can’t create temp file, exiting..."

exit 1

fi

関連項目

mkdtemp(3), mkstemp(3), mktemp(3), environ(7)

歴史

mktemp ユーティリティは OpenBSD 2.1 に登場しました。この実装は OpenBSD の マニュアルページとは独立に記述され、 FreeBSD 2.2.7 に初めて登場しました。 このマニュアルページは OpenBSD 由来です。

FreeBSD 10.0 November 20, 1996 FreeBSD 10.0

スポンサーリンク