.\" Copyright (c) 1989, 1991, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" From: %OpenBSD: mktemp.1,v 1.8 1998/03/19 06:13:37 millert Exp % .\" %FreeBSD: src/usr.bin/mktemp/mktemp.1,v 1.17 2004/07/02 22:22:28 ru Exp % .\" .\" $FreeBSD$ .Dd November 20, 1996 .Dt MKTEMP 1 .Os .Sh 名称 .Nm mktemp .Nd (ユニークな) 一時ファイル名を作成する .Sh 書式 .Nm .Op Fl d .Op Fl q .Op Fl t Ar prefix .Op Fl u .Ar template ... .Nm .Op Fl d .Op Fl q .Op Fl u .Fl t Ar prefix .Sh 解説 .Nm ユーティリティは、引数のファイル名テンプレートの一つ一つに対して、 その一部を上書きすることにより、ファイル名を生成します。 このファイル名はユニークであり、アプリケーションが使用するのに適しています。 テンプレートは、いくつかの .Ql X が後続する任意のファイル名であり、例えば .Pa /tmp/temp.XXXX です。 後続する .Ql X は、現在のプロセス番号やユニークな文字の組み合わせと置き換えられます。 .Nm が返すことが可能なユニークなファイル名の数は、指定した .Ql X の数に依存します; .Ql X を 6 つ指定した場合には、およそ 26 ** 6 の組み合わせを .Nm が扱えることとなります。 .Pp .Nm がユニークなファイル名を生成することに成功した場合、 ファイルがモード 0600 ( .Fl u フラグ未指定時) で作成され、ファイル名が標準出力に出力されます。 .Pp .Fl t Ar prefix オプション指定時には、 .Nm はテンプレート文字列を .Ar prefix と、 .Ev TMPDIR 環境変数が設定されていればそれも用いて生成します。 .Ev TMPDIR が設定されていない場合の、デフォルトの場所は .Pa /tmp です。ユーザが指定したかもしれない環境変数の使用が適切であると保証 できるかどうかに注意を払ってください。 .Pp 1 回の起動でいくつでも一時ファイルを作ってかまいません。これには、 .Fl t フラグの結果の内部テンプレートをもとにするものひとつも含まれます。 .Pp .Nm ユーティリティは、 シェルスクリプトが安全に一時ファイルを使用するために提供されています。 伝統的に多くのシェルスクリプトが、 プログラム名に pid を付けた名前を一時ファイル名として使用しています。 この種の命名法は予測されうるので、 レース状態となった場合に容易に攻撃者が勝ってしまいます。 より安全、しかしながらまだ劣ったアプローチとして、 同じ命名法でディレクトリを作るというものがあります。 この方法では一時ファイルが壊されないことを保証できますが、 単純なサービス停止攻撃を許してしまいます。 上記のような理由により、 .Nm の使用をお勧めします。 .Sh オプション 使用可能なオプションを以下に示します: .Bl -tag -width indent .It Fl d ファイルではなくディレクトリを作成します。 .It Fl q エラーが発生した場合、黙って失敗します。 エラー出力が標準エラーに出力されることが望ましくないスクリプトで有用です。 .It Fl t Ar prefix ファイル名テンプレートを生成するために必要なテンプレートを生成します (与えられた .Ar prefix と、設定されている場合には .Ev TMPDIR を使用します)。 .It Fl u .Dq 安全ではない モードで操作します。一時ファイルは .Nm が終了する前にアンリンクされます。これは .Xr mktemp 3 よりは少しましですが、依然レース状態を引き起こします。 このオプションの使用はお勧めしません。 .El .Sh 診断 .Nm ユーティリティは、成功時には値 0 で終了します。 失敗時には値 1 で終了します。 .Sh 使用例 以下の .Xr sh 1 スクリプトの一部で、 .Nm の簡単な使用方法を説明します。 このスクリプトは、安全な一時ファイルを取得できない場合には終了します。 .Bd -literal -offset indent tempfoo=`basename $0` TMPFILE=`mktemp /tmp/${tempfoo}.XXXXXX` || exit 1 echo "program output" >> $TMPFILE .Ed .Pp $TMPDIR を使用する場合には次のようにします: .Bd -literal -offset indent tempfoo=`basename $0` TMPFILE=`mktemp -t ${tempfoo}` || exit 1 echo "program output" >> $TMPFILE .Ed .Pp 次の場合、スクリプト自身でエラーをつかまえます。 .Bd -literal -offset indent tempfoo=`basename $0` TMPFILE=`mktemp -q /tmp/${tempfoo}.XXXXXX` if [ $? -ne 0 ]; then echo "$0: Can't create temp file, exiting..." exit 1 fi .Ed .Sh 関連項目 .Xr mkdtemp 3 , .Xr mkstemp 3 , .Xr mktemp 3 , .Xr environ 7 .Sh 歴史 .Nm ユーティリティは .Ox 2.1 に登場しました。この実装は .Ox のマニュアルページとは独立に記述され、 .Fx 2.2.7 に初めて登場しました。 このマニュアルページは .Ox 由来です。