Linux の touch コマンド は、指定したファイルのタイムスタンプ(アクセス時刻・更新時刻)を変更するためのコマンドです。
対象のファイルが存在しない場合は、空のファイルを新規作成することもできます。
ログファイルや一時ファイルの作成、デプロイ時の更新日時の調整など、Web サイト運用やアプリケーション運用でよく登場する基本コマンドのひとつです。
ファイルの中身を扱う cat コマンド や、ログをページ送りで確認する less コマンド と組み合わせて使われることが多いです。
touch [オプション] ファイル名...
複数ファイルを指定して、まとめてタイムスタンプを変更したり、空ファイルを一気に作成することもできます。
・空のファイルを新規作成する。
touch index.html
指定したファイルが存在しない場合、サイズ 0 の空ファイルが作成されます。
ひな形となるファイル名だけ先に作っておきたいときに便利です。
・複数の空ファイルをまとめて作成する。
touch app.log error.log access.logログファイルや一時ファイルなど、あとからアプリケーション側が追記していく前提のファイルを、事前にまとめて準備したいときに使えます。
・既存ファイルの更新時刻だけを現在時刻に変更する。
touch -m app.log
-m オプションを付けると、更新時刻(mtime)のみを変更します。
ファイルの中身は変えずに「更新された扱い」にしたいときに利用します。
・既存ファイルのアクセス時刻だけを変更する。
touch -a app.log
-a オプションを付けると、アクセス時刻(atime)のみを変更します。
アクセス時刻を監視している場合や、バックアップ・ログローテーションの動作確認をするときに使うことがあります。
・ファイルを作成せず、存在するファイルの時刻だけ変更する。
touch -c cache.tmp
-c オプションを付けると、指定したファイルが存在しない場合に新規作成しません。
「存在しているファイルだけ時刻を変更したい」「ファイルがなければ何もしない」というときに安全です。
・指定した日時を使ってタイムスタンプを設定する。
touch -d "2024-01-01 00:00:00" release.tag
-d オプションでは、文字列で指定した日時にタイムスタンプを変更できます。
「このリリースはこの日時」という目印をつけたいときなどに使います。
・参照ファイルと同じタイムスタンプに合わせる。
touch -r template.html index.html
-r オプションは、指定した参照ファイルと同じタイムスタンプに揃えます。
ファイルの中身は違っても、タイムスタンプだけ揃えたいケースで役立ちます。
・CCYYMMDDhhmm 形式で日時を指定する。
touch -t 202412312359 release.tag
-t オプションは、CCYYMMDDhhmm[.ss] 形式で日時を指定します。
スクリプト内で、決まった形式の文字列からタイムスタンプをセットしたいときに便利です。
・本番サーバに空の設定ファイルやマーカーを置く
デプロイ時に release.tag のようなマーカー用ファイルを置き、
そのファイルのタイムスタンプを見れば「いつデプロイされたか」が分かる、という運用はよくあります。
・ログローテーションやバックアップの動作確認
ログのアクセス時刻・更新時刻を touch で変更し、
バックアップスクリプトやログローテーションの設定が期待どおり動くかテストする、といった用途でも使われます。
・シェルスクリプトでの事前ファイル準備
バッチ処理や定期実行スクリプトの中で、
「処理結果を書き込む前に空のファイルを作成しておく」といった用途でも touch は定番です。
| short option | long option | description |
|---|---|---|
| -a | アクセス時刻のみを変更する | |
| -m | 更新時刻のみを変更する | |
| -c | --no-create | 存在しないファイルは新規作成せず既存のファイルだけを対象とする |
| -d | --date | 指定した日時文字列を使ってタイムスタンプを設定する |
| -t | CCYYMMDDhhmm[.ss] 形式で日時を指定してタイムスタンプを設定する | |
| -r | --reference | 指定した参照ファイルと同じタイムスタンプに設定する |
| -h | --no-dereference | シンボリックリンクを辿らずリンク自体のタイムスタンプを変更する |
| --time | 変更する時刻の種類(access か modify など)を明示的に指定する | |
| -A | --adjust | 指定したオフセット分だけ現在のタイムスタンプを前後にずらす |
より詳細なオプションや挙動については、Linux の
touch(1) マニュアルページ(英語)
もあわせて参照してください。
また、ファイルの中身を確認したい場合は cat コマンド、
ログを1画面ずつ読みたい場合は less コマンド のページも参考になると思います。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。
