概要
予測しにくい一意名を用いて一時ファイルや一時ディレクトリを作成します。/tmpを手書きで組み立てるより安全で、スクリプトの事故を減らせます。
基本構文
mktemp [オプション]... [雛形]詳細解説
mktempは、一時ファイルや一時ディレクトリを安全に作るためのコマンドです。/tmp/work.$$のような単純な名前付けは競合や乗っ取りの危険がありますが、mktempは予測しにくい名前を用いて衝突を避けやすくします。
実務では、整形途中の中間ファイル、差分生成前の退避場所、ログの一時集計、展開先ディレクトリなどで重宝します。特に複数プロセスが同時に動く環境や、世界書込可能な一時領域を使う環境では、mktempを使うかどうかで安全性が大きく変わります。
重要なのは「作って終わり」にしないことです。一時ファイルや一時ディレクトリは使い終わったら削除し、trapなどで異常終了時にも片付ける設計にすると品質が上がります。
このコマンドを使う場面
一時作業領域を安全に作りたい時、並列実行でも衝突しにくい作業ファイルが必要な時、スクリプトの中間生成物を扱う時に使います。
まず安全に試す方法
1. tmpfile=$(mktemp)
2. echo "$tmpfile"
3. tmpdir=$(mktemp -d)
4. echo "$tmpdir"
5. rm -f "$tmpfile"
6. rmdir "$tmpdir"
作成と後片付けを必ずセットで確認してください。
3分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
mktempで一時ファイルを作り、必ずrmで削除します。
-
mktemp -dで作業領域を作り、最後にrmdirで片付けます。
実行結果サンプル
-
mktemp/tmp/tmp.ABC123XYZ -
mktemp -d/tmp/tmp.QWE456RTY
戻り値コード
- 0 正常終了。一時ファイルまたは一時ディレクトリの作成に成功しました。
- >0 雛形不正、作成権限不足、作成場所の問題などで失敗しました。
使用例
mktempmktemp -dmktemp -p /tmp app.XXXXXX
よくあるエラー
-
/tmp/name.$$のように自前で一時名を作っていた 原因: 衝突や横取りに弱い実装です。対処: mktempで一意名を確保し、trapで削除まで設計します。
-
一時ファイルが残り続ける 原因: 後片付け処理を入れていません。対処: 成功時も異常終了時も削除するようtrapを使います。
導入・互換性情報
mktempはPOSIXの中核標準ではなく、実装差があります。雛形の扱い、既定の作成場所、-tの意味などは環境差が出やすいため、記事では使用例を雛形付きで明確に示すと安全です。
注意点 / セキュリティリスク
危険度は低いですが、一時ファイルを作って放置すると情報漏えいや掃除漏れの原因になります。秘匿データを扱う場合は権限と後片付けも必ず設計してください。
FAQ
-
Q. mktempは絶対に安全ですか。 A. 安全性を高めますが、作成後の権限管理や掃除設計まで含めて考える必要があります。
-
Q. 一時ディレクトリにも使えますか。 A. はい。-dを付けると一時ディレクトリを作成できます。
参照リンク
- カテゴリー: File And Directory
- レベル: Practical