今号では、touch コマンドの使い方やオプションについてご紹介します!
touch コマンドとは
touch コマンドは、ファイルのタイムスタンプを変更するコマンドです。
ファイルのタイムスタンプとは、ファイルへのアクセス日時や更新日時の事を言います。
存在しないファイル名を指定した場合は、空のファイル (テキストファイル) を作成します。
基本の書式
“touch ” コマンドを実行すると、ファイルのタイムスタンプを現在時刻へと更新します。
ここで言うタイムスタンプとは、ファイルのアクセス時刻と更新時刻の両方になります。
例として、text1 というファイルのタイムスタンプを変更してみます。
まずは text1 のタイムスタンプを変更する前の情報を、あらかじめ確認しておきます。
$ stat text1 File: `text1' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 18171963 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2022-09-13 14:01:15.245551301 +0900 Modify: 2022-09-13 14:01:15.245551301 +0900 Change: 2022-09-13 14:01:15.245551301 +0900 Birth: -
次に touch コマンドで text1 のタイムスタンプを変更し、再度タイムスタンプを確認します。
$ touch text1 $ stat text1 File: `text1' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 18171962 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2022-09-13 14:26:49.305260877 +0900 Modify: 2022-09-13 14:26:49.305260877 +0900 Change: 2022-09-13 14:26:49.305260877 +0900
タイムスタンプ (Access、Modify、Change) が更新されている事が確認できました。
touch コマンドのオプション
次に、touch コマンドで使用可能なオプション (一部抜粋) をご紹介します。
オプションには多くの種類がありますが、よく使用されると考えられるものを抜粋してご紹介します。
- 最終アクセス日時 (atime) を変更する
-a オプションを指定すると、最終アクセス日時 (atime) を変更します。
また、この時同時に ctime (ファイルの内容、もしくは属性を変更した時間) も変更されます。$ stat text1 File: `text1' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 18171962 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2022-09-13 14:26:49.305260877 +0900 Modify: 2022-09-13 14:26:49.305260877 +0900 Change: 2022-09-13 14:26:49.305260877 +0900 $ touch -a text1 $ stat text1 File: `text1' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 18171962 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2022-09-13 14:27:33.257137083 +0900 Modify: 2022-09-13 14:26:49.305260877 +0900 Change: 2022-09-13 14:27:33.257137083 +0900
- 編集日時 (mtime) を変更する
-m オプションを指定すると、ファイルの編集日時 (mtime) を変更します。
また、この時同時に ctime (ファイルの内容、もしくは属性を変更した時間) も変更されます。$ stat text1 File: `text1' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 18171962 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2022-09-13 09:34:27.863856572 +0900 Modify: 2022-09-13 09:34:27.863856572 +0900 Change: 2022-09-13 09:34:27.863856572 +0900 $ touch -m text1 $ stat text1 File: `text1' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 18171962 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2022-09-13 09:34:27.863856572 +0900 Modify: 2022-09-13 09:35:55.954219462 +0900 Change: 2022-09-13 09:35:55.954219462 +0900
- 存在しないファイル名を指定した場合に、空のファイルを作成しない
-c オプションを指定すると、指定したファイルが存在しない場合に空のファイルの作成しません。
誤ってファイルを作成したくない場合などにこのオプションを指定すると便利です。$ touch newfile $ ls newfile # -c オプションがない場合はファイルが作成される newfile $ touch -c newfile2 $ ls newfile2 -c オプションがある場合はファイルが作成されない ls: newfile2 にアクセスできません: そのようなファイルやディレクトリはありません
- タイムスタンプの日時を指定する
-d オプションを指定すると、タイムスタンプの日時を指定できます。
なお、この時 ctime (ファイルの内容、もしくは属性を変更した時間) は現在日時に変更されるため、指定の日時は反映されません。$ stat text1 File: `text1' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 18171962 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2022-09-13 09:36:28.051004881 +0900 Modify: 2022-09-13 09:36:28.051004881 +0900 Change: 2022-09-13 09:36:28.051004881 +0900 $ touch -d "2022-9-1 9:00" text1 $ stat text1 File: `text1' Size: 0 Blocks: 0 IO Block: 4096 通常の空ファイル Device: fd00h/64768d Inode: 18171962 Links: 1 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) Context: unconfined_u:object_r:admin_home_t:s0 Access: 2022-09-01 09:00:00.000000000 +0900 Modify: 2022-09-01 09:00:00.000000000 +0900 Change: 2022-09-13 09:37:01.300177846 +0900