Go to main content
マニュアルページ セク ション 1: ユー ザーコマンド

印刷ビューの終了

更新: 2016年12月6日
 
 

mktemp(1)

名前

mktemp - 一時ファイル名の作成

形式

mktemp [-dtqu] [--directory] [--quiet] [--dry-run] [-p directory]
     [--suffix=suff] [--tmpdir[=dir]] [template]

説明

mktemp ユーティリティーは一時ファイル名を作成します。この操作を行うために、mktemp は指定されたファイル名テンプレートを使用して、その一部を上書きし、一意のファイル名を作成します。「オペランド」の項を参照してください。

テンプレートは、mktemp(3C)mkdtemp(3C)mkstemp(3C)、および mkstemps(3C) ライブラリ関数を使用するパス名に変換されます。

mktemp が固有のファイル名を正しく生成できる場合、ファイル (またはディレクトリ) は、ファイルの所有者によってのみ読み取りおよび書き込みできるファイルのアクセス権で作成され (–u フラグが指定される場合を除く)、ファイル名は標準出力に出力されます。

mktemp では、一時ファイルを安全に使用するシェルスクリプトを使用できます。従来、多くのシェルスクリプトでは、PID を接尾辞としてプログラムの名前を使用し、これが一時ファイル名として使用されています。この種の名付けスキームは予測可能で、発生する競合状態は、攻撃者に簡単に利用されます。同じ命名スキームを使用して一時ディレクトリを作成するアプローチの方が安全ですが、やはり十分とは言えません。このアプローチでは、一時ファイルが破壊されないことが保証されますが、単純なサービス拒否攻撃を受ける可能性があります。代わりに mktemp を使用してください。

オプション

サポートしているオプションは、次のとおりです。

–d, ––directory

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

–p directory

一時ファイル名を生成するときに、指定されたディレクトリを接頭辞として使用します。ユーザーの TMPDIR 環境変数が設定されている場合、ディレクトリはこの環境変数によってオーバーライドされます。このオプションを指定すると、–t フラグも暗黙的に指定されます。

–q, ––quiet

エラーが発生した場合に失敗メッセージが表示されません。これは、スクリプトでエラー出力を標準エラーに出力しない場合に便利です。

––suffix=suff

suff をテンプレートに追加します。suff にはスラッシュ (/) を含めることができません。このオプションは、置換可能な X 文字以外の文字でテンプレートが終了する場合に暗黙的に仮定され、このような X 文字を含める要件は除外されません。

––tmpdir[=dir]

「テンプレート」は dir を基準として相対的に指定されます。dir が指定されない場合、ユーザーの環境変数 TMPDIR が設定されているときはこれが使用され、設定されていなければ /tmp が使用されます。このオプションは、絶対名を持つテンプレートをサポートせず、–t を使用する場合とは異なり、テンプレートにスラッシュが含まれている場合があります。

–t

一時ディレクトリをルートとするパスを生成します。このディレクトリは次のように選択されます。ユーザーの TMPDIR 環境変数が設定されている場合、そこに含まれているディレクトリが使用されます。それ以外の場合、–p フラグが指定されていたときは、指定されたディレクトリが使用されます。上記のいずれも当てはまらない場合、/tmp が使用されます。このモードでは、テンプレート (指定されている場合) は (フルパスとは対照的に) ディレクトリのコンポーネントである必要があるため、任意のスラッシュを含めることはできません。

–u, ––dry-run

安全でないモードで動作します。mktemp が終了する前に一時ファイルのリンクが解除されます。これは mktemp(3C) より若干良好ですが、やはり競合状態が発生します。このオプションを使用するのは望ましくありません。

オペランド

次のオペランドがサポートされています。

template

template は、たとえば /tmp/tfile.XXXXXX のような、3 つから 6 つの X が含まれた任意のファイル名にできます。

template が指定されない場合は、デフォルトの tmp.XXXXXX が使用され、–t フラグが暗黙的に使用されます。

連続する X が template に複数ある場合、–-suffix で別途指定される場合を除き、最後の連続文字が置換テキストとして使用されます。

template の最後の X のセットの後に文字がある場合、明示的に指定しないかぎり、–-suffix オプションはすべてその文字になることが暗黙的に指定されます。

使用例 1 mktemp の使用

次の例は、sh(1) スクリプトでの mktemp の簡単な使用例を示しています。この例では、スクリプトは安全な一時ファイルを取得できない場合、終了します。

TMPFILE=`mktemp /tmp/example.XXXXXX`
if [ -z "$TMPFILE" ]; then exit 1; fi
echo "program output" >> $TMPFILE
使用例 2 TMPDIR をサポートするための mktemp の使用

次の例は mktemp を使用して、ユーザーの TMPDIR 環境変数をサポートします。

TMPFILE=`mktemp -t example.XXXXXX`
if [ -z "$TMPFILE" ]; then exit 1; fi
echo "program output" >> $TMPFILE
使用例 3 一時ファイルの名前を指定しない mktemp の使用

次の例は、一時ファイルの名前を指定せずに mktemp を使用します。この場合、–t フラグが暗黙的に使用されます。

TMPFILE=`mktemp`
if [ -z "$TMPFILE" ]; then exit 1; fi
echo "program output" >> $TMPFILE
使用例 4 /tmp 以外のデフォルト一時ディレクトリを指定した mktemp の使用

次の例では、ユーザーの TMPDIR 環境変数で別の指定を行なっていないかぎり、/extra/tmp に一時ファイルが作成されます。

TMPFILE=`mktemp -p /extra/tmp example.XXXXX`
if [ -z "$TMPFILE" ]; then exit 1; fi
echo "program output" >> $TMPFILE
使用例 5 ファイルを削除するための mktemp の使用

次の例では 2 つの一時ファイルを作成しようとしています。2 番目の一時ファイルの作成に失敗した場合は、mktemp は終了する前に最初のファイルを削除します。

TMP1=`mktemp -t example.1.XXXXXX`
if [ -z "$TMP1" ]; then exit 1; fi
TMP2=`mktemp -t example.2.XXXXXX`
if [ -z "$TMP2" ]; then
        rm -f $TMP1
        exit 1
fi
使用例 6 mktemp の使用

次の例は、mktemp がファイルを作成できない場合、終了しません。スクリプトのその部分は保護されています。

TMPFILE=`mktemp -q -t example.XXXXXX`
if [ ! -z "$TMPFILE" ]
then
        # Safe to use $TMPFILE in this block
        echo data > $TMPFILE
        ...
        rm -f $TMPFILE
fi
使用例 7 suffix オプションを指定した mktemp の使用

次のコマンドは、suffix オプションの使用法を示しています。このコマンドの効果は、一時ファイル ex.q5N.SUFF を作成することです。

# mktemp --suffix=.SUFF ex.XXXXXX
ex.q5Ngid.SUFF
使用例 8 Suffix オプションと Tmpdir オプションの使用

次のコマンドは、suffix オプションと tmpdir オプションの使用法を示しています。

# mktemp --tmpdir=$HOME --suffix=.bar foo.XXXXXX
/root/foo.7ZaO_N.bar
使用例 9 Directory オプションと Suffix オプションの使用

次のコマンドでは、directory オプションと suffix オプションの両方が使用されています。

# mktemp --directory --suffix=.bar foo.XXXXXX
foo.GSaO3d.bar
# ls -l
drwx------   2 root     staff        512 Mar 19  2012 foo.GSaO.bar
使用例 10 X 以外の末尾文字を持つテンプレートのサポート

次のコマンドは、X 以外の末尾文字を使用したディレクトリオプションの使用例を示します。このコマンドでは、––suffix=suff オプションが暗黙的に使用され、接尾辞として bar が使用されます。

# mktemp XXfooXXXXXXbar
XXfooaFY0N6bar
使用例 11 Quiet オプションと Tmpdir オプションの使用

次のコマンドは、quiet オプションと tmpdir オプションの使用法を示しています。

# mktemp --quiet --tmpdir=/tmp foo
[No diagnostic message is returned]
使用例 12 複数のオプションを持つ mktemp の使用

次のコマンドは、dry-run オプション、tmpdir オプション、および suffix オプションの使用を組み合わせたものです。

# mktemp --dry-run --tmpdir=$HOME --suffix=SUFF
/root/tmp.qdaGcOSUFF
# ls -l /root/tmp.qdaGcOSUFF
/root/tmp.qdaGcOSUFF: No such file or directory

環境変数

–t オプションを使用した mktemp の実行に影響を与える次の環境変数についての詳細は、environ(5) を参照してください。TMPDIR。

TMPDIR

一時ファイルを作成するために使用されるディレクトリを指定して、システムのデフォルトをオーバーライドします。mktemp によって使用されます。

終了ステータス

次の終了ステータスが返されます。

0

正常終了。

1

エラーが発生した。

属性

属性についての詳細は、マニュアルページの attributes(5) を参照してください。

属性タイプ
属性値
使用条件
system/core-os
インタフェースの安定性
確実

関連項目

sh(1), mkdtemp(3C), mkstemp(3C), mkstemps(3C), mktemp(3C), attributes(5), environ(5)

mktemp ユーティリティーは OpenBSD 2.1 から使用されています。Solaris 実装では、mktemp(3C)mkstemp(3C)、および mkstemps(3C) について意味がある数の「X」のみが使用されます。