Linuxコマンドのtouchコマンドの使い方について書いています。
touchコマンドを使うことで、ファイルのタイムスタンプを変更することができます。
また、存在しないファイルパスを指定すると、新しくファイルを作ってくれます。
今回載せているコマンドはUbuntuの22.04.2で確認しました!
touchコマンドの使い方
touchコマンドを使うと、ファイルのタイムスタンプを変更できます。
実際に使ってみます。
lsコマンドで確認すると、下記のようなファイルが存在します。
$ ls -l
total 0
-rw-r--r-- 1 root root 0 May 18 05:51 test.md
-rw-r--r-- 1 root root 0 May 18 05:51 test.txt
touchコマンドを使って、test.txt
ファイルのタイムスタンプを変えてみます。
現在は5月18日の5時51分となっています。
$ touch test.txt
数分後に実行すると、下記のように実行した日時に変更されました。
5月18日の5時55分になりました。
$ ls -l
total 0
-rw-r--r-- 1 root root 0 May 18 05:51 test.md
-rw-r--r-- 1 root root 0 May 18 05:55 test.txt
このようにファイルのタイムスタンプを、現在日時に更新することができます。
ファイルを作成する
現在ディレクトリにないファイル名を指定すると、ファイルを作成することができます。
ファイル名を渡すだけで、作ることができます。
$ touch hoge.txt
実行した後に、lsコマンドで確認するとファイルができています。
$ ls -l
total 0
-rw-r--r-- 1 root root 0 May 18 05:56 hoge.txt
-rw-r--r-- 1 root root 0 May 18 05:51 test.md
-rw-r--r-- 1 root root 0 May 18 05:55 test.txt
パスの指定も可能
絶対パスや相対パスを指定して作成することもできます。
下記は、絶対パスを指定してファイルを作成しています。
$ touch /home/yasuaki/fuga.txt
yasuaki/
配下にfuga.txt
ファイルが作られます。
lsコマンドで確認すると、下記のようにファイルができました。
$ ls -l /home/yasuaki
total 0
-rw-r--r-- 1 root root 0 May 18 05:57 fuga.txt
touchコマンドのサンプル5つ!
touchコマンドをオプションをつけて使った、サンプルを5つ載せています。
アクセス日時の変更する
touchコマンドでアクセス日時を変更するには-a
オプションを使います。
lsコマンドでは更新日時しか確認できないので、statコマンドでアクセス日時を確認します。
$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: c4h/196d Inode: 2267394 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-18 05:55:20.428620112 +0000
Modify: 2023-05-18 05:55:20.428620112 +0000
Change: 2023-05-18 05:55:20.428620112 +0000
Birth: 2023-05-18 05:51:15.630549071 +0000
Access
項目にアクセス日時が書いています。現在は「5月18日 5時55分」です。
これに対して、touchコマンドに-a
をつけて、ファイルのアクセス日時を変更します。
$ touch -a test.txt
変更後に、もう一度statコマンドで確認してみました。
下記のように、アクセス日時だけ変わったことが確認できました。(5月18日 5時59分)
$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: c4h/196d Inode: 2267394 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-18 05:59:52.228250128 +0000
Modify: 2023-05-18 05:55:20.428620112 +0000
Change: 2023-05-18 05:59:52.228250128 +0000
Birth: 2023-05-18 05:51:15.630549071 +0000
更新日時の変更する
touchコマンドで更新日時を変えるときには-m
オプションを使います。
statコマンドでtest.txt
ファイルの時刻を確認します。
$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: c4h/196d Inode: 2267394 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-18 05:59:52.228250128 +0000
Modify: 2023-05-18 05:55:20.428620112 +0000
Change: 2023-05-18 05:59:52.228250128 +0000
Birth: 2023-05-18 05:51:15.630549071 +0000
Modify
項目を確認すると、更新日時は、このように「5月18日 5時55分」になっています。
-m
オプションを使って変更します。
$ touch -m test.txt
変更後に、もう一度statコマンドで確認します。
下記のように、更新日時だけ変わったことが確認できました。(5月18日 6時7分)
$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: c4h/196d Inode: 2267394 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-18 05:59:52.228250128 +0000
Modify: 2023-05-18 06:07:11.817587039 +0000
Change: 2023-05-18 06:07:11.817587039 +0000
Birth: 2023-05-18 05:51:15.630549071 +0000
他のファイルと同じタイムスタンプにする
指定したファイルを、他のファイルと同じタイムスタンプに変更します。
他のファイルと同じタイムスタンプにするときには-r
オプションを使います。
test.txt
ファイルのタイムスタンプは下記のように表示されます。
$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: c4h/196d Inode: 2267394 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-18 05:59:52.228250128 +0000
Modify: 2023-05-18 06:07:11.817587039 +0000
Change: 2023-05-18 06:07:11.817587039 +0000
Birth: 2023-05-18 05:51:15.630549071 +0000
このファイルのタイムスタンプをtest.md
ファイルと同じタイムスタンプにします。
$ touch -r test.md test.txt
-r
オプションの後にタイムスタンプの元にしたいファイルを書いて、その次に対象のファイルを書きます。
そうすると、元のファイルのタイムスタンプが、対象ファイルに適用されます。
実行した後にtest.txt
ファイルのタイムスタンプを確認すると、下記のようにアクセス日時と更新日時が変わりました!
$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: c4h/196d Inode: 2267394 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-18 05:51:18.249549094 +0000
Modify: 2023-05-18 05:51:18.249549094 +0000
Change: 2023-05-18 06:14:52.838723131 +0000
Birth: 2023-05-18 05:51:15.630549071 +0000
文字列でタイムスタンプを指定する
-d
オプションを使うことで、文字列でタイムスタンプを指定することができます。
実行すると、アクセス日付も更新日付も変わります。
$ touch -d "2020-01-01 01:01:01" test.txt
-d
オプションの後に文字列で、「2020年1月1日 1時1分1秒」を指定してみました。
test.txt
に適用しています。
statコマンドで確認すると、下記のように変わったことが確認できました。
$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: c4h/196d Inode: 2267394 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-01-01 01:01:01.000000000 +0000
Modify: 2020-01-01 01:01:01.000000000 +0000
Change: 2023-05-18 06:19:26.842072165 +0000
Birth: 2023-05-18 05:51:15.630549071 +0000
そもそもデフォルトだと日時はどうなる?
デフォルトの何もオプションを指定しない状態だと、アクセス日時も更新日時も変わります。
例えば、test.txt
は下記のような状態になっています。
$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: c4h/196d Inode: 2267394 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2020-01-01 01:01:01.000000000 +0000
Modify: 2020-01-01 01:01:01.000000000 +0000
Change: 2023-05-18 06:19:26.842072165 +0000
Birth: 2023-05-18 05:51:15.630549071 +0000
アクセス・更新日時ともに「2020年1月1日 1時1分1秒」になっています。
何もオプションを指定せずに実行します。
$ touch test.txt
statコマンドで確認すると、下記のようにアクセス・更新日時ともに変わりました。
$ stat test.txt
File: test.txt
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: c4h/196d Inode: 2267394 Links: 1
Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2023-05-18 06:22:51.540930120 +0000
Modify: 2023-05-18 06:22:51.540930120 +0000
Change: 2023-05-18 06:22:51.540930120 +0000
Birth: 2023-05-18 05:51:15.630549071 +0000
Macではtouchコマンドの挙動が違う?
Macで実行すると、touchコマンドで-m
で更新日時を変えたときに、アクセス日時も変わっていたようでした。
manコマンドで調べても更新日時を変更すると書いてあるのですが…
Macのtouchコマンドは動作が違うのかなと感じました。
わかる方はコメントの方をお願いします😓
touchコマンドのオプション一覧
今回使ったオプションを一覧にしてみました。
オプション | 内容 |
---|---|
-a | アクセス日時のみ変更する |
-m | 更新日時のみ変更する |
-d | 現在時刻の代わりに文字列を解釈して、アクセス・更新日時を変える |
-r | 現在時刻の代わりに指定したファイルのタイムスタンプを使う |
詳細はmanコマンドなどで確認してみてください。
touchコマンドの使い方まとめ
今回はtouchコマンドについて書きました。
記事の内容をまとめると、下記のようになります。
・touchコマンドに指定したファイルがないときには作ってくれる。
・touchコマンドで、アクセス・更新日時のそれぞれを更新できた。
コメント