エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


Linuxのタイムスタンプはmtime、ctime、atimeの3種類。touchコマンドで更新する方法

   

Linuxのタイムスタンプはmtime、ctime、atimeの3種類ある

 

Linuxのタイムスタンプのmtime、ctime、atimeの違い

 
Linuxのファイルのタイムスタンプには 3種類あります。
 

  • mtime:最終変更日時
  • ctime:inodeの変更日時
  • atime:最終アクセス日時

 
もう少し詳しく説明します。
 

mtime:最終変更日時

 
「mtime」は一番分かりやすく、一番良く使う、ファイルの内容を書き換えた日時です。
 
「ls -l」で表示させることができます。
 
viコマンドなどでファイルを内容を更新した場合に「mtime」も更新されます。
ですが、less、view、更新しない場合の vi、chmod、chownなど、ファイルの内容を更新しないコマンドでは更新されません。
 
ちなみに、viでファイルの内容を更新したときは、「mtime」だけでなく、「ctime」「atime」も更新されます。
 
 

ctime:inodeの変更日時

 
「ctime」は、inodeが更新された日時です。
inodeは、ファイルやフォルダに与えられる一意の整数値で、パーミッションや所有者の ID、グループIDなどファイルを管理するための情報と関連付けられている値です。
この inodeに関連付けられている情報が更新された日時が「ctime」となります。
 
「ls -lci」で表示させることができます。
 
inodeに関しては、下記のサイトなどを参考にしてください。
https://wa3.i-3-i.info/word14802.html
 
chmod、chownコマンドなどでファイルの属性情報などが更新されると「ctime」も更新されます。
対して、less、vi、viewなどファイルの中身を表示するだけであれば更新されません。(viコマンドでファイルの内容を更新した場合は「ctime」も更新されます。)
 
 

atime:最終アクセス日時

 
「atime」は、最も頻繁に更新されるタイムスタンプで、ファイルに対してなにかの操作を行うと更新された日時です。
 
「ls -lu」で表示させることができます。
 
ファイルに対して、less、viコマンドなどを実行すると更新されます。(viコマンドでは保存していなくても開くだけで更新されます。)
ですが、view、chmod、chownコマンドなどでは更新されません。
 
 

touchコマンドの -d、-m、-aオプションの違い

 
touchコマンドは、0バイトのファイルを作成したり、ファイルやフォルダの更新日時を変更したりするときに使用します。
 
ですが、ファイルの更新日を変更するオプションとして、-d、-m、-aがあります。
それぞれのオプションは、先に解説した、mtime、ctime、atimeと対になっていますので、オプションの内容を理解するには、それぞれのタイムスタンプの意味するところを理解する必要があります。
 
 

touch -d では mtime、ctime、atimeすべてを更新する

 
touchコマンドでファイルの日時を更新する際、一番良く使うであろうオプションは「-d」だと思います。
 

 
これは、ファイルの中身が更新されたときと同じ状況にするオプションです(viコマンドで中身を表示し、何も変更せずに保存して閉じる作業をした状態と同じです)。
そのため、mtime、ctime、atimeのすべてが更新されます。
 
 
また、上記のように「-d」オプションに続いて日時を指定することで、指定した日時に変更することができます。
 
日時の指定は、「2019/01/01 01:00:00 am」「Tue Jan 1 12:00:00 JST 2019」のように、一般的に使う表記方法であればだいたい使えます。
 
 

 
上記のように、日時を指定しない場合は、コマンドを実行した日時に変更されます。
 
 

 
さらに、「-d」も指定しない場合は、「-d」が指定されたものとして処理されます。
 

 
ちなみに、上記のように「-d」を省略して日時を指定することはできません。
エラーメッセージが表示されますが、「touch file.txt」が実行された状態でファイルが生成されます。
 
 

touch -m では ctimeのみを更新する

 
タイムスタンプのうち、ctimeのみを更新したい場合は「-m」のオプションを使います。
ただし、更新できるのは現在の日時のみで、日時を指定することはできません。
 

 
この場合は、mtime、atimeは更新されません。
chmodコマンドで、実行前と同じパーミッションを指定して実行した場合と同じ結果となります。
 
 

touch -a では ctime、atimeを更新する

 
タイムスタンプを更新するオプションとして、「-a」というオプションもあります。
このオプションでは、ctime、atimeの 2つを更新します。
また、更新できるのは現在の日時のみで、日時を指定することはできません。
 

 
 

touchコマンドのその他のオプションの使い方

 
touchコマンドにはその他にもいくつかオプションがあります。
 
 

touch file.txtでファイルがない場合は新規作成される

 

 
touchコマンドを実行した場合、指定したファイルが存在しない場合は、0バイトの空のファイルが生成されます。
 
 

touch -c では新規作成はされない

 
指定したファイルがない場合でも、ファイルを新規作成されたくない場合は「-c」のオプションを追加します。
 

 - Linuxコマンド

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

UNIX・Linuxの sedコマンドで特定の文字列を置換する方法

UNIX・Linuxのコマンドで特定の文字列を置換する sedコマンドの使い方と、perlコマンドを使っての方法を解説しています。

Linux findコマンドを使ってn日前のファイルを削除する 3つの記述方法
Linux findコマンドを使ってn日前のファイルを削除する 3つの記述方法

作成からn日経ったファイルを削除したい、そんなときにはfindコマンドを使う。コマンドの記述の方法は3種類あり、それぞれを解説。書き易さもあるがスピードに大きく差がある記述方法もある。