Linux のすべてのファイルは、最終アクセス時刻、最終変更時刻、および最終変更時刻を指定するタイムスタンプに関連付けられています。
新しいファイルを作成するか、既存のファイルまたはその属性を変更するたびに、これらのタイムスタンプは自動的に更新されます。
これらのタイムスタンプ (ファイルのアクセス時間、変更時間、および変更時間) を変更するには、タッチ コマンドを使用します。
1. touch を使用して空のファイルを作成する
touch コマンドを使用して空のファイルを作成できます。次の例では、tgs.txt という名前のゼロ バイトの新しいファイルを作成します。
$ touch tgs.txt
-c オプションを使用して、新しいファイルの作成を回避することもできます。 -c オプションを使用し、ファイルが存在しない場合、touch はファイルを作成しません。
$ touch -c a.txt
ls コマンドや find コマンドなどのコマンドは、これらのタイムスタンプ情報を使用して、ファイルの一覧表示と検索を行います。
1 つの touch コマンドから複数のファイルを作成することもできます。次の例では、a、b、c、および d という名前の 4 つのファイルを作成します。
$ touch a b c d
2. -a を使用してファイルのアクセス時間を変更する
-a オプションを使用して、ファイルのアクセス時間を変更できます。デフォルトでは、現在のシステム時刻を取得し、atime フィールドを更新します。
タッチコマンド実行前:
$ stat tgs.txt File: `tgs.txt' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 394283 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/lakshmanan) Gid: ( 1000/lakshmanan) Access: 2012-10-18 23:58:21.663514407 +0530 Modify: 2012-10-18 23:58:21.663514407 +0530 Change: 2012-10-18 23:58:21.663514407 +0530
$ touch -a tgs.txt
上記のタッチコマンドの後 (アクセス時間は変更されることに注意してください):
$ stat tgs.txt File: `tgs.txt' Size: 0 Blocks: 0 IO Block: 4096 regular empty file Device: 801h/2049d Inode: 394283 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/lakshmanan) Gid: ( 1000/lakshmanan) Access: 2012-10-19 00:08:23.559514525 +0530 Modify: 2012-10-18 23:58:21.663514407 +0530 Change: 2012-10-19 00:08:23.559514525 +0530
3. -m を使用してファイルの変更時刻を変更する
-m オプションを使用して、ファイルの変更時刻を変更できます。
$ touch -m *.o
上記の方法は、make ユーティリティを使用する場合、すべての obj ファイルの mtime を変更するために使用できます。
注:touch コマンドを使用して ctime を変更することはできません
4. -t と -d を使用して明示的にアクセス時間と変更時間を設定する
現在のタイムスタンプを取得する代わりに、-t および -d オプションを使用して時刻を明示的に指定できます。
-t の指定形式は [[CC]YY]MMDDhhmm[.SS]
です。$ touch -t [[CC]YY]MMDDhhmm[.SS]
次に、上記の形式について説明します。
- CC – 年の上 2 桁を指定します
- YY – 年の下 2 桁を指定します。 YY の値が 70 ~ 99 の場合、CC 桁の値は 19 と見なされます。YY の値が 00 ~ 37 の場合、CC 桁の値は 20 と見なされます。 2038 年 1 月 18 日を超える日付を設定することはできません。
- MM – 月を指定します
- DD – 日付を指定します
- hh – 時間を指定します
- mm – 分を指定します
- SS – 秒を指定します
例:
$ touch -a -m -t 203801181205.09 tgs.txt
stat コマンドを使用して上記の変更を確認します:
$ stat tgs.txt File: `tgs.txt' Size: 3 Blocks: 8 IO Block: 4096 regular file Device: 801h/2049d Inode: 394283 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 1000/lakshmanan) Gid: ( 1000/lakshmanan) Access: 2038-01-18 12:05:09.000000000 +0530 Modify: 2038-01-18 12:05:09.000000000 +0530 Change: 2012-10-19 00:40:58.763514502 +0530
文字列を使用して時刻を変更することもできます
別の例:
$ touch -d "2012-10-19 12:12:12.000000000 +0530" tgs.txt
開発者にとっては、Makefile を扱うときに touch コマンドが非常に役立ちます
5. -r を使用して別のファイルからタイムスタンプをコピーする
ファイルを参照として取得し、他のファイルの時間を更新して、両方のファイルが同じ時間を保持するようにすることもできます。
次の touch コマンドの例は、ファイル a.txt のタイムスタンプを tgs.txt ファイルのタイムスタンプで更新します。
$ touch a.txt -r tgs.txt