エス技研

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


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

      2019/02/24

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.

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

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

  関連記事

Linuxのコマンドの情報を調べるwhich、whereis、whatis、apropos、man
Linuxのコマンドの情報を調べるwhich、whereis、whatis、apropos、man

Linuxのコマンドの実行ファイルやマニュアルの情報を確認するコマンドwhich、whereis、whatis、apropos、manの機能と使い方、似たところと違うところの紹介。

Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も
Linuxでファイルの内容を表示するcatコマンドの解説。more、lessで代替も

catはLinuxのコマンドで、本来の機能はファイルを連結だが、ファイルの内容を表示する機能のために使うことが多く使用頻度が高い。同種の機能のmore、less、tacコマンドについても解説。

less、moreはページャー、ファイルの中身を表示するLinuxのコマンド
less、moreはページャー、ファイルの中身を表示するLinuxのコマンド

Linuxにはコマンドで実行した結果が長い場合、1画面ごとに区切って表示するコマンドが用意されている。それがページャーと呼ばれるmore、lessだ。この使い方を解説。

makewhatis、mandbコマンドでLinuxのオンラインマニュアル索引情報を更新
makewhatis、mandbコマンドでLinuxのオンラインマニュアル索引情報を更新

Linuxコマンドのオンラインマニュアルを検索するwhatis、aproposなどのコマンドはwhatisデータベースを対象に検索する。このデータベースを更新するmandb、makewhatisコマンドを解説。

Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説
Linuxの環境変数でパスの設定をする方法とシェル変数の扱い方を解説

Linuxでコマンドを設置するパスの設定情報である環境変数「PATH」の確認方法と環境変数「PATH」に新しいパスを追加する方法の解説。Linuxのシェルでの変数の扱い方についての解説も。

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

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

Linuxのbashで変数に値を追加する方法を多数紹介。+=や""を使う方法など
Linuxのbashで変数に値を追加する方法を多数紹介。+=や””を使う方法など

Linuxのbashで変数に値を代入する方法を解説。bashの変数の処理は柔軟で様々な方法を採れる。デリミタなしで値を追加する方法などを解説。

Linuxのnlは行番号を付与してファイルの内容を表示するコマンド
Linuxのnlは行番号を付与してファイルの内容を表示するコマンド

Linuxでファイルを表示する際に行番号を付与するにはcatコマンドにnオプションを使うことでも可能。しかし、行番号を付与する専門のnlコマンドがある。ここではその使い方を詳細に解説。

Linuxで使用される主な環境変数・PATH、HOME、PS1・printenv、set、declare
Linuxで使用される主な環境変数・PATH、HOME、PS1・printenv、set、declare

Linuxに設定されている主な環境変数の解説。PWD、HOSTNAME、USER、LANG、HOME、LOGNAME、PS1、PS2、HISTSIZE、HISTFILE、HISTFILESIZE、TERMなどがある。

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

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