概要
touch コマンドは、ファイルのタイムスタンプ(アクセス時刻や更新時刻)を現在時刻または指定した日時に更新するためのコマンドです。
ファイルが存在しない場合は、サイズ0の「空ファイル」を新規作成する用途でも頻繁に使用されます。
動作テスト用のダミーファイル作成や、システムのバックアップ処理、make コマンドのビルド対象制御などで重要な役割を果たします。
仕様(引数・オプション)
構文
touch [オプション] ファイル名
主な引数・オプション
| オプション | 説明 |
-a | アクセス時刻(atime)のみを変更します。 |
-m | 修正時刻(mtime)のみを変更します。 |
-c | ファイルが存在しない場合、新規作成を行いません(no-create)。 |
-r <ファイル> | 指定した参照ファイル(reference)と同じ時刻を適用します。 |
-t <時刻> | 指定した形式([[CC]YY]MMDDhhmm[.ss])の時刻を使用します。 |
-d <文字列> | “2 days ago” などの文字列で日時を指定します。 |
タイムスタンプの種類
Linuxのファイルシステムが持つ3種類の時刻属性についての解説です。
| タイムスタンプ | 略称 | 概要 | 説明 |
| atime | Access Time | 最終アクセス時刻 | ファイルの中身が読み取られた(catやgrep等)最後の時刻です。 |
| mtime | Modify Time | 最終修正時刻 | ファイルの内容が変更された(書き込み等)最後の時刻です。 |
| ctime | Change Time | 最終変更時刻 | ファイルの属性(権限、所有者、サイズ等)や内容が変更された時刻です。 |
※ touch コマンドを実行すると、指定したタイムスタンプ(atime/mtime)に加え、inode情報が更新されるため ctime も同時に現在時刻へ更新されます。
基本の使い方
最も基本的な使い方は、オプションなしで引数にファイル名を指定することです。ファイルが存在しない場合は空ファイルが作成され、存在する場合はタイムスタンプが現在時刻に更新されます。
コマンド
# 新規に空ファイルを作成(または既存ファイルの時刻更新)
touch application.log
# 確認
ls -l application.log
実行結果
-rw-r--r-- 1 user user 0 Jan 20 14:30 application.log
実践コマンド
他のファイルの時刻情報をコピーする
あるファイルのタイムスタンプを、別のファイルにそのまま適用したい場合に使用します。バックアップの整合性を合わせる際などに便利です。
# source_config の時刻を target_config に適用
touch -r source_config.conf target_config.conf
(出力なし。ls -l で確認すると両者の時刻が一致しています)
アクセス時刻・修正時刻を個別に変更する
すべての時刻ではなく、特定の属性だけを更新したい場合に使用します。
# アクセス時刻(atime)のみを更新
touch -a readme.txt
# 修正時刻(mtime)のみを更新
touch -m script.sh
(出力なし)
日時を指定してファイルを作成・更新する
現在時刻ではなく、過去や未来の日時を指定してタイムスタンプを設定します。テストデータの作成や、ファイルの並び順を調整する際に役立ちます。
# 文字列で日時を指定(3日前)
touch -d "3 days ago" old_backup.tar
# 具体的な日時を指定(2025年12月25日 10:00)
touch -d "2025-12-25 10:00" christmas_log.txt
$ ls -l
-rw-r--r-- 1 user user 0 Jan 17 14:35 old_backup.tar
-rw-r--r-- 1 user user 0 Dec 25 2025 christmas_log.txt
※ old_backup.tar の日付は実行日から3日前の日付になります。
カスタムポイント
- 日時フォーマット:
-dオプションは “next Monday” や “2024/01/01” など柔軟な書式を受け付けます。 - 対象ファイル: ワイルドカード(
*.txt)を使用して一括更新することも可能です。 - 参照ファイル:
-rオプションは、システム移行時に旧サーバーのファイル日付を引き継ぐ際によく利用されます。
注意点
- ctimeの挙動:-a や -m で特定の時刻だけを指定しても、ファイルのメタデータ自体は書き換わるため、ctime(ステータス変更時刻)は必ず「コマンド実行時の現在時刻」に更新されます。ctime を過去の任意の日時に偽装することは、通常の touch コマンドではできません。
- 権限:他人の所有するファイルのタイムスタンプを変更するには、書き込み権限が必要です。権限がない場合は Permission denied エラーになります(sudo が必要)。
- 空ファイルの量産:スクリプト等でループ処理とともに使用する場合、意図せず大量の空ファイルを作成してinodeを枯渇させないよう注意してください。
応用
連番の空ファイルを一括作成する
シェル(Bash)のブレース展開機能と組み合わせて、テスト用のダミーファイルを一瞬で大量に作成する手法です。
# test_01.dat から test_10.dat までを一括作成
touch test_{01..10}.dat
# 拡張子の異なるファイルを一括作成
touch index.{html,css,js}
$ ls
index.css index.html index.js test_01.dat ... test_10.dat
まとめ
touchコマンドは、単なる空ファイルの作成ツールとしてだけでなく、ファイルのタイムスタンプを精密に制御するための重要な管理コマンドです。システム運用においては、ログローテーションの動作確認や、バックアップファイルの日時整合性の維持、あるいはプログラムのビルド条件となる「最終更新日時」の操作など、多岐にわたる場面で活用されます。特にオプションによるatimeとmtimeの使い分けや、他のファイルから時刻をコピーする機能は、スクリプト作成時に役立つため確実に覚えておくべき機能です。
