ホーム > ファイル・ディレクトリ管理 > mktemp

mktemp: 一時ファイル/ディレクトリの作成

mktempコマンドは、一意の名前を持つ一時ファイルまたはディレクトリを安全に作成します。スクリプトで一時的な保存領域が必要な場合に、名前の衝突やセキュリティの問題なく使用できるように設計されています。

概要

mktempは、予測不可能で一意の名前を持つ一時ファイルまたはディレクトリを作成し、セキュリティおよび競合の問題を防ぎます。主にシェルスクリプトで安全な一時領域が必要な場合に使用され、作成されたファイル/ディレクトリのパスは標準出力に返されます。

主な特徴

  • 一意で予測不可能な名前の生成
  • セキュリティ脆弱性の防止(競合状態攻撃の防止)
  • 一時ファイルまたは一時ディレクトリの作成を選択可能
  • シェルスクリプトの自動化に適している

主なオプション

mktempコマンドは、一時ファイルまたはディレクトリの作成方法を制御するいくつかの主要なオプションを提供します。

作成タイプ

名前テンプレート

生成されたコマンド:

コマンドを組み合わせてみてください。

説明:

`mktemp` コマンドを実行します。

これらのオプションを組み合わせて、AIと一緒に仮想的にコマンドを実行してみてください。

使用例

mktempコマンドを活用して一時ファイルおよびディレクトリを作成し、スクリプトで活用する様々な方法を示します。

基本一時ファイルの作成

mktemp

デフォルトの一時ディレクトリ(通常は/tmp)に、一意の名前を持つ一時ファイルを作成します。

一時ディレクトリの作成

mktemp -d

-dオプションを使用して一時ディレクトリを作成します。

特定のパターンで一時ファイルを作成

mktemp /tmp/my_app.XXXXXX

指定されたパスとパターンを使用して一時ファイルを作成します。「X」は一意の文字に置き換えられます。

スクリプトでの一時ファイルの活用と自動削除

TEMP_FILE=$(mktemp)
if [ -z "$TEMP_FILE" ]; then
  echo "Failed to create temp file"
  exit 1
fi
trap 'rm -f "$TEMP_FILE"' EXIT

echo "一時ファイルパス: $TEMP_FILE"
echo "Hello from mktemp!" > "$TEMP_FILE"
cat "$TEMP_FILE"
# スクリプト終了時に$TEMP_FILEは自動的に削除されます。

作成された一時ファイルのパスを変数に格納し、trapコマンドを使用してスクリプト終了時に自動的にファイルを削除します。

スクリプトでの一時ディレクトリの活用と自動削除

TEMP_DIR=$(mktemp -d)
if [ -z "$TEMP_DIR" ]; then
  echo "Failed to create temp directory"
  exit 1
fi
trap 'rm -rf "$TEMP_DIR"' EXIT

echo "一時ディレクトリパス: $TEMP_DIR"
echo "This is a test file." > "$TEMP_DIR/test.txt"
ls -l "$TEMP_DIR"
cat "$TEMP_DIR/test.txt"
# スクリプト終了時に$TEMP_DIRは自動的に削除されます。

作成された一時ディレクトリのパスを変数に格納し、trapコマンドを使用してスクリプト終了時に自動的にディレクトリを削除します。

ヒントと注意点

mktempを使用する際の役立つヒントと注意すべき点です。

使用後のクリーンアップ必須

mktempは一時ファイルを生成しますが、自動的に削除はしません。スクリプト終了時に`rm`コマンドを使用して、作成されたファイルまたはディレクトリを明示的に削除する必要があります。`trap`コマンドを活用すると、スクリプトがどのような方法で終了しても自動的にクリーンアップできます。

  • ファイル: `rm "$TEMP_FILE"`
  • ディレクトリ: `rm -rf "$TEMP_DIR"`
  • 自動クリーンアップ: `trap 'rm -rf "$TEMP_PATH"' EXIT`

セキュリティに関する考慮事項

mktempは、一時ファイル作成時に発生しうる競合状態(race condition)攻撃を防ぐように設計されており安全です。しかし、作成されたファイルに機密情報を保存する場合は、ファイル権限を適切に設定して(例: `chmod 600 $TEMP_FILE`)、他のユーザーがアクセスできないようにする必要があります。

テンプレート使用時

テンプレート文字列には、少なくとも3つ以上の「X」文字を含める必要があります。「X」の数が多いほど、生成される名前の一意性が高まります。

  • 推奨: XXXXXX (6個以上)
  • 最小: XXX (3個)


同じカテゴリのコマンド