Linuxコマンド touch(ファイルのタイムスタンプを更新/空ファイルの作成)

指定したファイルが存在しない場合は、空のファイルを作成する。指定したファイルが存在する場合は、ファイルのアクセス時刻や更新時刻を変更するtouchコマンドを解説。

RHEL Fedora CentOS Vine Deblan Ubuntu Plamo

参考サイト:Man page of INSTALL

使用方法

touchコマンドを使用することにより、ファイルのタイムスタンプを変更できます。また、指定したファイルが存在しない場合は、新たにサイズがゼロのファイルを作成します。

書式

$ touch [オプション] ファイル名・・・

オプション

-aアクセス時刻のみを変更する
-m更新時刻のみを変更する
-c,
-no-create
指定したファイルが存在しない場合はファイルを作成しない
-r ファイル名,
–reference=ファイル名
指定したファイルが持つ時刻に変更する
-t 時刻指定した時刻に変更する。
時刻は[[CC]YY] MMDDhhmm[.SS]形式で指定する。
-d 時刻,
–date=時刻
比較的アバウトな表記で日付指定ができる。
※2 days age
オプション一覧

UNIXでは、以下の3種類のタイムスタンプがあります。

タイムスタンプの種類

タイムスタンプ概要説明
atimeアクセス時刻ファイルにアクセスした時間。ページャでファイルを読んだり、
エディタで内容を変更したときに更新される。ls(1)では-luオプションで確認可能
ctime状態変更時刻ファイルが作成された時間ではなく、エディタで内容を変更した時、
アクセス権限を変更した時、所有者の変更を行ったときに更新される。
ls(1)では-lcオプションで確認可能
mtime更新時刻エディタで内容を変更したときに更新される。
ls(1)では-lオプションで確認可能。
dtime抹消時刻コマンド実行により直接使用することはない。

タイムスタンプ
ファイルやディレクトリごとに作成日時、最終アクセス時刻などの属性を保持しています。これをタイムスタンプといいます。Linuxではディレクトリ等を含むファイル情報はinode(アイノード)に格納されています。タイムスタンプもinodeに記録されている。

未来のファイルの作成
以前のtouchコマンドでは、実行時刻より先の日時に変更することができなかったが、現在は可能となっている。

サンプル:空ファイルを作成する

$ touche sample1.txt

実行結果

[centos@ work]$ ls -l
total 0
drwxrwxr-x 2 centos centos 6 Apr 15 23:45 tmp
[centos@ work]$ touch sample1.txt
[centos@ work]$ ls -l
total 0
-rw-rw-r-- 1 centos centos 0 Apr 16 23:41 sample1.txt  ←空のファイルが作成される。
drwxrwxr-x 2 centos centos 6 Apr 15 23:45 tmp
[centos@ work]$ cat sample1.txt 
[centos@ work]$ 

他のファイルの更新時刻を反映させる。

touchコマンドに「-r」オプションを指定することで、他のファイルのタイムスタンプを別のファイルに反映させることができる。

サンプル

$ touche -r ref_sample.txt target_sample.txt

実行結果

[centos@ work]$ ls -l
total 4
-rw-rw-r-- 1 centos centos 0 Apr 16 23:41 ref_sample.txt
-rw-rw-r-- 1 centos centos 7 Apr 16 23:51 target_sample.txt
[centos@ work]$ touch -r ref_sample.txt target_sample.txt 
[centos@ work]$ ls -l
total 4
-rw-rw-r-- 1 centos centos 0 Apr 16 23:41 ref_sample.txt
-rw-rw-r-- 1 centos centos 7 Apr 16 23:41 target_sample.txt   #←target_sample.txtと同じタイムスタンプになる。
[centos@ work]$ 

ファイルの更新日時を変更する

touchコマンドに「-m」オプションを指定することで、ファイルの更新日時を現在日時に変更することができる。

サンプル

$ touch -m sample.txt

実行結果

[centos@ work]$ touch -m sample.txt
[centos@ work]$ ls -l --full-time
total 4
-rw-rw-r-- 1 centos centos 7 2021-04-17 00:24:40.926396999 +0000 sample.txt
[centos@ work]$ date
Sat Apr 17 00:24:47 UTC 2021
[centos@ work]$ 

更新時刻を変更したファイルを作成する

touchコマンドに「-t」オプションを指定することで、ファイルのタイムスタンプを任意の日時に変更することができる。

サンプル

$ touch -t 202104010000 sample.txt

実行結果

[centos@ work]$ touch -t 202104010000 sample.txt
[centos@ work]$ ls -l
total 4
-rw-rw-r-- 1 centos centos 7 Apr  1 00:00 sample.txt
[centos@ work]$