EN JA
MKTEMP(1)
MKTEMP(1) FreeBSD General Commands Manual 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 つ指定した場合には、 mktemp は、56800235584 (62 ** 6) のあり得るファイル名の 1 つを選択することとなります。

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

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

引数がが渡されないか、または -d フラグのみが渡されるなら、 mktemp は、あたかも -t tmp が供給されたかのように、振る舞います。

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

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

オプション

利用可能なオプションは、次の通りです:
-d
ファイルではなくディレクトリを作成します。
-q
エラーが発生した場合、黙って失敗します。エラー出力が標準エラーに出力されることが望ましくないスクリプトで有用です。
-t prefix
ファイル名テンプレートを生成するために必要なテンプレートを生成します (与えられた prefix と、設定されている場合には TMPDIR を使用します)。
-u
“安全ではない”モードで操作します。一時ファイルは、 mktemp が終了する前にアンリンクされます。これは、 mktemp(3) よりは少しましですが、依然レース状態を引き起こします。このオプションの使用はお勧めしません。

終了ステータス

The mktemp utility exits 0 on success, and >0 if an error occurs.

使用例

安全な一時ファイルを取得することができないなら、スクリプトが終了するべきところで、次の 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

歴史

mktemp ユーティリティは、 OpenBSD 2.1 で登場しました。この実装は、 OpenBSD のマニュアルページをベースに独立して書かれ、 FreeBSD 2.2.7 ではじめて登場しました。このマニュアルページは、 OpenBSD から受け継がれています。
December 30, 2005 FreeBSD