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]$