【Linuxコマンド入門】touchコマンドの使い方!

linux command Linuxコマンド

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コマンドに指定したファイルがないときには作ってくれる。
・touchコマンドで、アクセス・更新日時のそれぞれを更新できた。

コメント

タイトルとURLをコピーしました