touchコマンドは、ファイルのタイムスタンプを変更するコマンドです。
Linuxファイルのタイムスタンプには、3種類の日時があります。
mtime:最終変更日時
mtimeは、ファイルの内容を書き換えた日時です。
ls -lで表示させることができます。
viコマンドなどでファイルを内容を更新した場合にmtimeも更新されます。
ctime:inodeの変更日時
ctimeは、inodeが更新された日時です。
inodeとは、ファイルやフォルダに与えられる一意の整数値で、パーミッションや所有者のID、グループIDなどファイルを管理するための情報と関連付けられている値です。
この inodeに関連付けられている情報が更新された日時がctimeなります。
ls -lcで表示させることができます。
chmod、chownコマンドなどでファイルの属性情報などが更新されるとctimeも更新されます。
atime:最終アクセス日時
atimeは、最も頻繁に更新されるタイムスタンプで、ファイルに対して何かしらの操作を行われると更新される日時です。
ls -luで表示させることができます。
ファイルに対して、less、viコマンドなどを実行すると更新されます。
また、viコマンドでは保存していなく、開くだけで更新されます。
touchコマンドは、mtime、ctime、atimeを書き換えることができます。
また、もう一つの機能としては、存在しないファイル名を指定することで、空のファイルを新規作成することができます。
多くの人は、touchコマンドは、ファイルのタイムスタンプを変更するのではなく、ファイルを新規作成するコマンドと覚えている方が多いのではないでしょうか。
touchコマンドの基本
touchコマンドの基本は、「ファイルを作成した時点のタイプスタンプにする」及び「ファイルの新規作成」になります。
基本的な書式は、以下の通りになります。
$ touch ファイル名
例えば、ファイルtestの新規作成と新規作成された時点のタイムスタンプにする場合は、次のコマンドになります。
$ touch test
touchコマンドのオプション
オプション -d(オプション–date=STRING):日時を指定します。
オプション -c(オプション–no-create):ファイルを新規作成をしません。
オプション -r(オプション–reference=FILE):他のファイルのタイムスタンプに合わせます。
-dオプション(–date=STRINGオプション):日時を指定する
日時を指定する書式は、以下の通りになります。
$ touch -d 日付 ファイル名
例えば、ファイルtestのタイムスタンプを2021年2月22日18:30に指定する場合は、以下の通りになります。
$ touch -d “2021-2-22 18:30” test
-dオプションでは、Linuxのすべてのタイムスタンプである、mtime、ctime、atimeを更新することができます。ファイルのタイムスタンプをすべて統一したい場合によく使用されます。
-cオプション(–no-createオプション):ファイルを新規作成しない
同じ名前のファイルが存在する場合は、新規作成をしないが、存在しない場合は、新規作成をします。
書式は、以下の通りになります。
$ touch -c ファイル名
-rオプション(–reference=FILEオプション):他のファイルのタイムスタンプに合わせる
対象ファイルを、既存のファイルのタイムスタンプと同じにします。
書式は次の通りになります。
$ touch -r 既存のファイル名 対象ファイル名
例えば、以下のような条件の場合
- 既存のファイル名がoldというファイル名のタイムスタンプが、2018年1月20日14:30分
- 対象ファイル名がnewというファイル名のタイムスタンプが、2021年2月10日15:30分
$ touch -r old new
上記コマンドを実行すると、対象ファイル名がnewというファイル名のタイムスタンプは、既存のファイル名oldのタイムスタンプ、2018年1月20日14:30分に書き換えられます。