4.7. 空のファイルの作成 -touchコマンド-

【コマンド説明】
touchコマンドは本来ファイルのアクセス日時や修正日時を変更するコマンドですが、ファイルが存在しない場合に空(容量0バイト)のファイルを作成する際に頻繁に用いられます。

空のファイルはどこで使われるか?
空のファイルは プログラムのインストール時等に作成されることが多いです。

【動画説明】
現在のディレクトリ上に、「test3」という名前の空のファイルを作って、そのファイルサイズを確かめてみましょう。

$ touch test3

$ ls -l

touchコマンド以外にも空のファイルを作る方法があります。以下のようにすれば先ほどと同じように空のファイルを作成できます。

$ cp /dev/null ファイル名

touchコマンドを含めて上記の記述があれば、空のファイルを作れることを理解しておきましょう。

【オプション説明】
touchコマンドには以下のようなオプションがあります。

-a 最終アクセス日時を変更する
-m 最終更新日時を変更する
-c ファイルが存在しない場合はファイルを作成しない
-t 現在日時ではなく、YYYYMMDDHHMM形式で指定した日時に変更する

touchコマンドは本来ファイルのアクセス日時や修正日時を変更するコマンドです。
最も良く利用される例は、ファイルの内容を変更しないまま、タイムスタンプ*を現在の日付と時刻に変更するケースです。Linuxのファイルは最終更新日時と最終アクセス日時の2つの時間を持っています。”ls -l”で表示されるのは最終更新日時で、”ls -lu”で表示されるのは最終アクセス日時です。touchコマンドで何もオプションを指定しなかった時は、両方の時間が現在日時に変更されます。

*タイムスタンプ
ファイルの最終更新日時や最終アクセス日時をタイムスタンプと呼ぶことがあります。システムが動く過程において、何らかの事象が
発生した時に、ログインファイル等に記録することもありますが、空のファイルに最終更新日時だけを記録することで、タイムスタンプを記録する方法があります。タイムスタンプは容易に改ざんされては信頼性が失われるため、対象のファイルの書き込み・変更権限はセキュリティの観点から制限されていることが多いです。 

【動画説明】
ファイル「test」のタイムスタンプを変更してみましょう。

$ ls -l

$ touch test

$ ls -l (最終更新日時の確認)

$ ls -lu (最終アクセス日時の確認)

ファイル「test」のタイムスタンプは更新されました。

では、次に最終アクセス時刻を変更してみましょう。

$ ls -lu test (現在の最終アクセス日時の確認)

$ touch -a test (最終アクセス日時の変更)

$ ls -lu test (最終アクセス時刻が変更されていることを確認)

$ ls -l test (最終更新日時は変更されていないことを確認)

ファイル「test」の最終アクセス日時は更新されました。

では、最後に最終更新日時を2012年6月7日5時7分に変更してみましょう。

$ touch test2

$ ls -l test2 (最終更新日時を確認)

$ touch -mt test2 201206070507 (最終更新日時を2012年6月7日5時7分に変更)

$ ls -l test2 (最終更新日時が更新されたことを確認)

$ ls -lu test2 (最終アクセス日時は更新されていないことを確認)

ファイル「test2」の最終更新日時は更新されました。

【問題】
1. test3というファイルを作り、最終更新日時を2005年10月1日0:00に設定してみましょう
2. ディレクトリtest4の中のファイルとディレクトリ全てのタイムスタンプを更新するコマンドを考えてみましょう
ヒント:他のコマンドと組み合わせて使います