Linuxコマンド「touch」詳解:ファイルのタイムスタンプ操作と新規作成

概要

touchコマンドは、Linuxシステムにおいて、主に二つの重要な役割を担います。一つは新しい空のファイルを生成すること、もう一つは既存ファイルのアクセス時刻や修正時刻といったタイムスタンプを操作することです。ファイルが存在しない場合は新規作成を行い、ファイルが存在する場合はそのタイムスタンプを更新します。

ファイルのタイムスタンプ

Linuxファイルシステムでは、各ファイルに関連付けられた複数のタイムスタンプがあります。主要なものは以下の通りです。

  • アクセスタイム (atime): ファイルが最後に読み込まれた時刻。
  • 修正タイム (mtime): ファイルの内容が最後に変更された時刻。
  • 変更タイム (ctime): ファイルのメタデータ(パーミッション、オーナー、ファイル名、および他のタイムスタンプ自体を含む「状態」情報)が最後に変更された時刻。

特に重要な点として、atimemtimeはファイルの状態メタデータの一部であるため、これらの時刻を-aオプションや-mオプションなどで変更すると、ctimeは自動的に現在のシステム時刻に更新されます。ctimeを直接手動で設定することはできません。

基本的な構文

touchコマンドの基本的な構文は以下の通りです。

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

主要なオプション

-a, --time=atime, --time=access, --time=use
ファイルのアクセスタイム(読み込み時刻)のみを変更します。
-c, --no-create
指定されたファイルが存在しない場合でも、新しいファイルを作成しません。タイムスタンプの更新のみを行います。
-d, --date=<日時文字列>
指定された日時文字列に基づいて、ファイルの修正時刻とアクセス時刻を変更します。現在時刻の代わりに指定した日時が使用されます。
-h, --no-dereference
ファイルがシンボリックリンクである場合、シンボリックリンク自体のタイムスタンプを変更し、リンク先のファイルには影響を与えません。このオプションは-cを暗黙的に含みます(ファイルが存在しない場合でも作成しない)。
-m, --time=mtime, --time=modify
ファイルの修正タイム(内容変更時刻)のみを変更します。
-r, --reference=<参照ファイルまたはディレクトリ>
指定された参照ファイルまたはディレクトリのタイムスタンプ(アクセスタイムと修正タイム)を、対象ファイルのタイムスタンプとしてコピーします。
-t <日時>
[[CC]YY]MMDDhhmm[.SS]の形式で指定された日時を使用して、ファイルの修正時刻とアクセス時刻を設定します。
--help
ヘルプメッセージを表示します。
--version
バージョン情報を表示します。

使用例

空ファイルの作成

touchコマンドにファイル名を指定するだけで、サイズ0の新しいファイルが作成されます。ファイルが存在しない場合、このコマンドは新規作成として機能します。

[root@centos7 testdir]# touch new_document.txt
[root@centos7 testdir]# ls -l new_document.txt
-rw-r--r-- 1 root root 0 Jan  2 07:55 new_document.txt

既存ファイルのタイムスタンプ更新

対象ファイルがすでに存在する場合、touchコマンドをオプションなしで実行すると、そのファイルのアクセスタイムと修正タイムが現在のシステム時刻に更新されます。この操作により、ctimeも自動的に更新されます。

[root@centos7 testdir]# date
Sat Jan  2 07:57:00 EST 2021
[root@centos7 testdir]# touch new_document.txt
[root@centos7 testdir]# ls -l new_document.txt
-rw-r--r-- 1 root root 0 Jan  2 07:57 new_document.txt

特定の日時を指定してタイムスタンプを変更

-dオプションを使うと、指定した文字列の日時にファイルのアクセスタイムと修正タイムを設定できます。

[root@centos7 testdir]# touch -d "2023-01-15 10:30:00" new_document.txt
[root@centos7 testdir]# ls -l new_document.txt
-rw-r--r-- 1 root root 0 Jan 15 10:30 new_document.txt

他のファイルのタイムスタンプを基準に設定

-rオプションを使用すると、指定した参照ファイルのタイムスタンプ(アクセスタイムと修正タイム)を別のファイルに適用できます。

[root@centos7 testdir]# touch -r new_document.txt copied_time_file.txt
[root@centos7 testdir]# ls -l new_document.txt copied_time_file.txt
-rw-r--r-- 1 root root 0 Jan 15 10:30 copied_time_file.txt
-rw-r--r-- 1 root root 0 Jan 15 10:30 new_document.txt

タグ: linux touchコマンド ファイル操作 タイムスタンプ シェルコマンド

6月16日 20:08 投稿