
LinuC入門|touchコマンドでファイルのタイムスタンプを更新する
内容は変えず、時刻だけを更新する。touchコマンドでLinuxファイルの時間情報を正しく管理しよう。
Linuxのファイルには、名前、サイズ、所有者、アクセス権などの情報に加えて、いつアクセスされたのか、いつ内容が更新されたのかといった時間の情報が記録されています。この時間情報をタイムスタンプと呼びます。
ファイルの内容を書き換えると、通常は内容の更新日時も変化します。しかし、動作確認やファイル管理では、内容を変更せずにタイムスタンプだけを現在時刻へ更新したいことがあります。
そのときに使用するのがtouchコマンドです。
touchコマンドを使うと、既存ファイルのアクセス日時や更新日時を現在時刻へ変更できます。また、日時を指定して更新したり、アクセス日時と更新日時のどちらか一方だけを変更したりすることもできます。
さらに、指定したファイルが存在しない場合は、ファイルサイズが0バイトの空ファイルが新しく作成されます。そのため、touchはタイムスタンプの更新だけでなく、学習用や設定用の空ファイルを準備するときにもよく使われます。
この記事ではAlmaLinux 10.2を使用し、一般ユーザーsuzukiによる操作例を確認しながら、touchコマンドの書式、タイムスタンプの種類、-t、-a、-mの使い方、空ファイルが作成される仕組みを詳しく解説します。
ファイルに記録される3種類のタイムスタンプ
Linuxのファイルには、主に次の3種類のタイムスタンプがあります。
| タイムスタンプ | 正式な名称 | 表す内容 |
|---|---|---|
| atime | アクセス日時 | ファイルの内容が最後に読み出された日時 |
| mtime | 更新日時 | ファイルの内容が最後に変更された日時 |
| ctime | ステータス変更日時 | ファイルの管理情報が最後に変更された日時 |
3種類ともファイルに関係する日時ですが、それぞれが示す内容は異なります。
atimeとは
atimeはaccess timeの略で、ファイルの内容が最後にアクセスされた日時を表します。
たとえば、ファイルの内容を読み出す処理が行われると、atimeが更新されることがあります。
ただし、現在のLinuxでは、ファイルシステムのマウント設定によってatimeの更新回数が抑えられることがあります。そのため、ファイルを読み出すたびに必ずatimeが変化するとは限りません。
touchでは、-aを指定するとatimeだけを更新できます。
mtimeとは
mtimeはmodification timeの略で、ファイルの内容が最後に変更された日時を表します。
たとえば、テキストファイルへ新しい文章を書き込んだ場合や、既存の内容を修正した場合にmtimeが更新されます。
ls -lで通常表示される日時は、このmtimeです。
suzuki@AlmaLinux:~$ ls -l server-note.txt
-rw-r--r--. 1 suzuki suzuki 1845 8月 14 21:30 server-note.txtこの例では、server-note.txtの内容が最後に更新された日時が8月14日21時30分であることを示しています。
touchでは、-mを指定するとmtimeだけを更新できます。
ctimeとは
ctimeはchange timeの略で、ファイルのステータスが最後に変更された日時を表します。
ここでいうステータスとは、ファイルの内容だけではありません。次のような管理情報も含まれます。
- アクセス権
- 所有ユーザー
- 所有グループ
- ハードリンク数
- ファイルサイズ
- mtimeやatimeなどの時間情報
ctimeを作成日時と考えてしまうことがありますが、Linuxにおけるctimeは一般にcreation timeではありません。ファイルの管理情報が変化した日時です。
touchでatimeやmtimeを変更した場合も、時間情報という管理情報が変更されるため、ctimeは現在時刻へ更新されます。
touchでは、ctimeを利用者が指定した日時へ直接変更することはできません。
図1:atime・mtime・ctimeの違い

この図から分かること
atime、mtime、ctimeは、それぞれ異なる変化を記録しています。
ファイルを読み出した日時がatime、内容を変更した日時がmtime、ファイルの管理情報が変更された日時がctimeです。
ls -lで通常確認できるのはmtimeです。touchはatimeとmtimeを更新できますが、ctimeを任意の日時へ設定することはできません。
lsコマンドで更新日時を確認する
lsコマンドは、ファイルやディレクトリの情報を一覧表示するコマンドです。
今回の操作では、touchを実行する前後のmtimeを確認するために使用します。
lsコマンドの書式
ls [オプション] [ファイルまたはディレクトリ]lsコマンドの主なオプション
| オプション | 説明 |
|---|---|
| -l | ファイルの種類、アクセス権、所有者、サイズ、mtimeなどを詳細表示する |
ls -lの使用例
suzuki@AlmaLinux:~$ ls -l maintenance.log
-rw-r--r--. 1 suzuki suzuki 256 8月 14 20:15 maintenance.log表示された各項目の意味は次のとおりです。
| 表示例 | 説明 |
|---|---|
| -rw-r--r--. | ファイルの種類とアクセス権 |
| 1 | ハードリンク数 |
| suzuki | 所有ユーザー |
| suzuki | 所有グループ |
| 256 | ファイルサイズ |
| 8月14日 20:15 | 内容の更新日時であるmtime |
| maintenance.log | ファイル名 |
touchを実行した後にもう一度ls -lを実行し、日時が変化したか確認します。
touchコマンドとは
touchコマンドは、指定したファイルのatimeとmtimeを更新するコマンドです。
オプションを付けずに実行すると、atimeとmtimeの両方が現在時刻へ更新されます。既存ファイルの内容やサイズは変更されません。
指定した名前のファイルが存在しない場合は、サイズが0バイトの空ファイルが新しく作成されます。
touchコマンドの書式
touch [オプション] ファイルtouchコマンドの概要
| 項目 | 内容 |
|---|---|
| コマンド | touch |
| 主な役割 | ファイルのatimeとmtimeを更新する |
| 既定の日時 | コマンドを実行した現在時刻 |
| ファイルが存在する場合 | 内容を変えずにタイムスタンプを更新する |
| ファイルが存在しない場合 | サイズが0バイトの空ファイルを作成する |
touchコマンドの主なオプション
| オプション | 説明 |
|---|---|
| -t [[CC]YY]MMDDhhmm[.ss] | 指定した日時を使用してタイムスタンプを更新する |
| -a | atimeだけを更新する |
| -m | mtimeだけを更新する |
touchコマンドの引数
| 引数 | 説明 |
|---|---|
| ファイル | タイムスタンプを更新するファイル名を指定する。存在しない場合は空ファイルが作成される |
touchは複数のファイル名を並べて指定することもできますが、この記事では1つのファイルを対象に操作を確認します。
既存ファイルのタイムスタンプを現在時刻へ更新する
maintenance.logという既存ファイルを使って、touchの基本動作を確認してみましょう。
最初にls -lで現在のmtimeを確認します。
suzuki@AlmaLinux:~$ ls -l maintenance.log
-rw-r--r--. 1 suzuki suzuki 256 8月 14 20:15 maintenance.logファイルサイズは256バイト、mtimeは8月14日20時15分です。
次に、オプションを付けずにtouchを実行します。
suzuki@AlmaLinux:~$ touch maintenance.log正常に更新できた場合、通常はメッセージを表示せずにプロンプトへ戻ります。
もう一度ls -lで確認します。
suzuki@AlmaLinux:~$ ls -l maintenance.log
-rw-r--r--. 1 suzuki suzuki 256 8月 15 00:25 maintenance.logmtimeが8月15日0時25分へ変わりました。
一方、ファイルサイズは256バイトのままです。touchはmaintenance.logの内容を書き換えていないため、ファイルサイズも変化していません。
この操作で更新されるタイムスタンプを整理すると、次のようになります。
| タイムスタンプ | touch実行後の変化 |
|---|---|
| atime | 現在時刻へ更新される |
| mtime | 現在時刻へ更新される |
| ctime | atimeとmtimeの変更に伴い、現在時刻へ更新される |
ctimeも変化しますが、touchがctimeへ任意の日時を直接指定しているわけではありません。ファイルの管理情報が変更された結果として、自動的に現在時刻へ更新されます。
touchを実行してもファイル内容は変わらない
touchという名前から、ファイルの内容へ何かを書き込むように感じるかもしれません。しかし、既存ファイルにオプションなしでtouchを実行しても、内容は変更されません。
たとえば、maintenance.logに文字が保存されていても、touchの実行後にその文字が削除されたり追加されたりすることはありません。
変化するのは時間情報です。
| 項目 | touch実行前後 |
|---|---|
| ファイル名 | 変わらない |
| ファイル内容 | 変わらない |
| ファイルサイズ | 変わらない |
| atime | 更新される |
| mtime | 更新される |
| ctime | 管理情報の変更に伴って更新される |
タイムスタンプだけを調整したいときに、ファイル内容を開いて保存し直す必要はありません。
ファイルが存在しない場合は空ファイルが作成される
touchに存在しないファイル名を指定すると、エラーで終了するのではなく、その名前で空ファイルが作成されます。
この動作をempty-note.txtで確認してみましょう。
最初にcatコマンドでファイルの内容を表示しようとします。
suzuki@AlmaLinux:~$ cat empty-note.txt
cat: empty-note.txt: そのようなファイルやディレクトリはありませんこの時点ではempty-note.txtが存在しないため、エラーが表示されます。
touchを実行します。
suzuki@AlmaLinux:~$ touch empty-note.txtls -lで確認します。
suzuki@AlmaLinux:~$ ls -l empty-note.txt
-rw-r--r--. 1 suzuki suzuki 0 8月 15 00:35 empty-note.txtファイルサイズが0と表示されています。これは、ファイルの中にデータが保存されていないことを表します。
catで内容を表示します。
suzuki@AlmaLinux:~$ cat empty-note.txt
suzuki@AlmaLinux:~$内容が空なので何も表示されず、そのまま次のプロンプトへ戻ります。
図2:touchの対象が存在する場合と存在しない場合

この図から分かること
touchは、指定したファイルが存在するかどうかによって動作が変わります。
既存ファイルを指定した場合は、内容を変更せずにタイムスタンプを更新します。存在しないファイルを指定した場合は、その名前でサイズ0バイトの空ファイルを作成します。
空ファイルを作成するためだけの特別なオプションは必要ありません。
catコマンドとは
catコマンドは、指定したファイルの内容を端末へ表示するコマンドです。
catはconcatenateに由来する名前です。本来は複数のファイルを連結して表示する機能を持ちますが、1つのファイルの内容確認にもよく使われます。
この記事では、touchで作成したファイルの内容が空であることを確認するために使用します。
catコマンドの書式
cat [オプション] ファイルcatコマンドの主なオプション
今回の操作では、catにオプションを指定しません。
| オプション | 説明 |
|---|---|
| なし | 指定したファイルの内容を端末へ表示する |
catコマンドの使用例
suzuki@AlmaLinux:~$ cat empty-note.txtempty-note.txtが空の場合は、文字を何も表示せずにプロンプトへ戻ります。
catで何も表示されない場合でも、必ずしもファイルが存在しないわけではありません。
| 状態 | catの結果 |
|---|---|
| ファイルが存在して内容がある | ファイル内容を表示する |
| ファイルが存在して内容が空 | 何も表示せずプロンプトへ戻る |
| ファイルが存在しない | そのようなファイルやディレクトリはありませんと表示する |
-tで指定した日時へ変更する
-tを使用すると、現在時刻ではなく、指定した日時をタイムスタンプとして設定できます。
-tの書式
touch -t [[CC]YY]MMDDhhmm[.ss] ファイル日時は区切り記号を入れず、決められた順番で数字を並べます。
[[CC]YY]MMDDhhmm[.ss]各部分の意味は次のとおりです。
| 記号 | 内容 | 桁数 | 指定例 |
|---|---|---|---|
| CC | 西暦年の上2桁 | 2桁 | 20 |
| YY | 西暦年の下2桁 | 2桁 | 26 |
| MM | 月 | 2桁 | 08 |
| DD | 日 | 2桁 | 15 |
| hh | 時 | 2桁 | 09 |
| mm | 分 | 2桁 | 30 |
| ss | 秒 | 2桁 | 45 |
CCとYYは省略できます。西暦年を省略した場合は、現在の年が使用されます。
秒は.の後ろに指定し、省略できます。
西暦年を含めて日時を指定する
maintenance.logのatimeとmtimeを、2026年8月15日9時30分45秒へ変更してみましょう。
suzuki@AlmaLinux:~$ touch -t 202608150930.45 maintenance.log指定値を分解すると次のようになります。
2026 08 15 09 30 .45| 指定値 | 意味 |
|---|---|
| 2026 | 2026年 |
| 08 | 8月 |
| 15 | 15日 |
| 09 | 9時 |
| 30 | 30分 |
| 45 | 45秒 |
ls -lでmtimeを確認します。
suzuki@AlmaLinux:~$ ls -l maintenance.log
-rw-r--r--. 1 suzuki suzuki 256 8月 15 09:30 maintenance.logls -lの通常表示では、秒が省略されることがありますが、mtimeには指定した秒も記録されています。
西暦年と秒を省略して日時を指定する
現在の年の1月20日8時15分へ変更する場合は、次のように指定できます。
suzuki@AlmaLinux:~$ touch -t 01200815 maintenance.log指定値は次のように分解できます。
01 20 08 15| 指定値 | 意味 |
|---|---|
| 01 | 1月 |
| 20 | 20日 |
| 08 | 8時 |
| 15 | 15分 |
西暦年と秒を省略しているため、実行時の年が使用され、秒は0として扱われます。
suzuki@AlmaLinux:~$ ls -l maintenance.log
-rw-r--r--. 1 suzuki suzuki 256 1月 20 08:15 maintenance.log日時の各部分は必ず2桁で指定します。1月は1ではなく01、8時は8ではなく08と記述します。
-tで指定するときの注意点
-tの日時は、各部分の間に空白、ハイフン、スラッシュ、コロンを入れません。
正しい形式は次のように数字を続けます。
touch -t 202608150930.45 maintenance.log-tでは次の点を確認してください。
- 月は01から12で指定する
- 日はその月に存在する日付を指定する
- 時は00から23で指定する
- 分は00から59で指定する
- 秒を指定するときは.の後ろへ記述する
- 年を省略すると現在の年が使用される
- 既定ではatimeとmtimeの両方が指定日時へ変更される
- ctimeは指定日時ではなく、操作を行った現在時刻へ更新される
-aでアクセス日時だけを更新する
-aを指定すると、atimeだけが更新されます。
-aの書式
touch -a ファイル現在時刻をatimeとして設定する例は次のとおりです。
suzuki@AlmaLinux:~$ touch -a access-check.txtこの操作では、基本的に次のように変化します。
| タイムスタンプ | 変化 |
|---|---|
| atime | 現在時刻へ更新される |
| mtime | 変更されない |
| ctime | atimeの変更に伴って現在時刻へ更新される |
ls -lで通常表示されるのはmtimeです。そのため、touch -aの前後でls -lを実行しても、表示される日時が変わらないことがあります。
suzuki@AlmaLinux:~$ ls -l access-check.txt
-rw-r--r--. 1 suzuki suzuki 120 8月 14 19:20 access-check.txt
suzuki@AlmaLinux:~$ touch -a access-check.txt
suzuki@AlmaLinux:~$ ls -l access-check.txt
-rw-r--r--. 1 suzuki suzuki 120 8月 14 19:20 access-check.txttouch -aは正常に実行されていますが、mtimeを変更していないため、ls -lの日時表示は同じです。
-mで更新日時だけを更新する
-mを指定すると、mtimeだけが更新されます。
-mの書式
touch -m ファイル使用例は次のとおりです。
suzuki@AlmaLinux:~$ ls -l report.txt
-rw-r--r--. 1 suzuki suzuki 980 8月 14 18:10 report.txt
suzuki@AlmaLinux:~$ touch -m report.txt
suzuki@AlmaLinux:~$ ls -l report.txt
-rw-r--r--. 1 suzuki suzuki 980 8月 15 00:50 report.txtmtimeが8月15日0時50分へ更新されました。
この操作での変化は次のとおりです。
| タイムスタンプ | 変化 |
|---|---|
| atime | 変更されない |
| mtime | 現在時刻へ更新される |
| ctime | mtimeの変更に伴って現在時刻へ更新される |
ls -lではmtimeが表示されるため、touch -mの結果は直接確認しやすくなります。
-aまたは-mと-tを組み合わせる
-aや-mは、-tと組み合わせることができます。
atimeだけを2026年8月15日10時00分へ変更する場合は、次のように実行します。
suzuki@AlmaLinux:~$ touch -a -t 202608151000 access-check.txtmtimeだけを2026年8月15日11時30分へ変更する場合は、次のように実行します。
suzuki@AlmaLinux:~$ touch -m -t 202608151130 report.txt組み合わせによる違いは次のとおりです。
| コマンド | atime | mtime |
|---|---|---|
| touch ファイル | 現在時刻へ更新 | 現在時刻へ更新 |
| touch -a ファイル | 現在時刻へ更新 | 変更しない |
| touch -m ファイル | 変更しない | 現在時刻へ更新 |
| touch -t 日時 ファイル | 指定日時へ更新 | 指定日時へ更新 |
| touch -a -t 日時 ファイル | 指定日時へ更新 | 変更しない |
| touch -m -t 日時 ファイル | 変更しない | 指定日時へ更新 |
どの指定でも、atimeやmtimeが実際に変更されるとctimeは操作時の現在時刻へ更新されます。
図3:touchのオプションによる更新範囲

この図から分かること
オプションを付けないtouchはatimeとmtimeの両方を更新します。-aを付けるとatimeだけ、-mを付けるとmtimeだけが対象になります。
-tを組み合わせることで、現在時刻ではなく指定した日時を設定できます。一方、ctimeはどのオプションでも任意の日時へ直接設定できません。
touchを実行するために必要な権限
一般ユーザーsuzukiは、通常、自分が所有するファイルのタイムスタンプを変更できます。
suzuki@AlmaLinux:~$ touch server-note.txt自分が所有していないファイルでは、アクセス権や指定方法によってtouchを実行できないことがあります。
現在時刻へ更新する場合は、対象ファイルに対する書き込み権限によって操作できる場合があります。一方、-tで任意の日時を指定する場合は、通常、対象ファイルを所有している必要があります。
権限がない場合は、次のようなエラーが表示されます。
suzuki@AlmaLinux:~$ touch protected.log
touch: 'protected.log' の時刻を設定中: 許可されていない操作です学習では、suzukiのホームディレクトリにある自分のファイルを使用すると安全です。システムが使用している重要なファイルのタイムスタンプを、rootユーザーでむやみに変更しないようにしましょう。
touchを使用するときに確認したいポイント
touchを実行するときは、次の点を確認すると安全に操作できます。
- 対象のファイル名が正しいか確認する
- 既存ファイルか、新しく作成するファイルかを確認する
- オプションなしではatimeとmtimeの両方が更新される
- -aではatimeだけが更新される
- -mではmtimeだけが更新される
- -tでは数字の並び順を間違えない
- 年を省略すると現在の年が使用される
- 秒は.の後ろへ指定する
- ls -lで通常表示されるのはmtimeである
- touch -aの結果はls -lの日時には現れない
- ctimeは任意の日時へ直接変更できない
- 存在しないファイル名を指定すると空ファイルが作成される
- 既存ファイルにtouchを実行しても内容とサイズは変わらない
- 権限のないファイルはタイムスタンプを変更できない場合がある
touchは短いコマンドですが、タイムスタンプの種類とオプションの関係を理解していないと、意図しない日時を設定してしまうことがあります。
実行前にls -lでmtimeを確認し、touchを実行した後にもう一度ls -lで結果を確認する流れを身につけておくと、落ち着いて操作できるようになります。
