mactime

一般的に、ファイルシステムはファイルの時間に関する情報を複数持ちます。Unix系ファイルシステムではmtime, atime, ctimeの3つの時刻情報を保持しており、これらの頭文字をとってmactimeと呼ばれています。

mtime(ファイルの最終修正時刻 - time of last modification)

  • 書き込み、作成、削除などで更新される
  • ファイルの内容(コンテンツ)が変更された(mknod、truncate、utime、writeなどのシステムコールが呼び出された)場合に更新される
  • メタデータ(オーナやパーミッションなど)が変更しても更新されない
  • ディレクトリのmtimeはその配下のファイルの作成や削除によって更新される

atime(ファイルの最終アクセス時刻 - time of last access)

  • 読み込み、実行、ディレクトリエントリの参照などで更新される
  • ファイルの内容(コンテンツ)にアクセスした(execve、mknod、pipe、utime、readなどのシステムコールが呼び出された)場合に更新される
  • mmapシステムコールが呼び出された場合は更新される可能性があるが確実ではない

ctime(ファイル情報の最終変更時刻 - time of last status change)

  • ファイルのメタデータ(オーナ、パーミッション、リンク数など)が変更されると更新される
  • ファイルの内容(コンテンツ)が変更されても更新される
  • ファイルを削除した場合、削除時刻が記録される
  • chmod、chown、mknod、linkなどのシステムコールが呼び出された場合に更新される

mactimeの更新タイミングについて、いくつか具体例を書いておきます。

  • ファイルの新規作成(touchコマンド)で、mtime, atime, ctimeがコマンド実行時刻になる
  • パーミッションの変更(chmodコマンド)で、ctimeのみコマンド実行時刻になる
  • ファイル名の変更(mvコマンド)で、ctimeのみコマンド実行時刻になる
  • ファイルの内容閲覧(more, lessコマンド)で、atimeのみコマンド実行時刻になる
  • ファイルへの内容書込(echo a > ファイル名)で、mtime, ctimeがコマンド実行時刻になる
  • ファイルコピー(cpコマンド)で、コピー元ファイルはatimeのみ、作成したファイルはmtime, atime, ctimeがコマンド実行時刻になる
  • wgetコマンドによるファイル取得では、mtimeは更新されずそのファイルが最後に修正された時刻に、atimeはファイル取得開始の時刻に、ctimeが取得終了後の時刻になる
  • ブラウザ経由のダウンロードでは、mtime, atime, ctimeがファイル取得時点の時刻になる

ファイルのmactimeの参照方法はいくつかあります。Unix系ではstatコマンドを利用するか、ls -lでmtime, ls -luでatime, ls -lcでctimeを参照することができます。

一方、Windows系(NTFS)ではModify, Access, Created, Entry Modifiiedの4つの時刻情報を保持しています。CreatedがUnix系のmactimeにはない時刻情報であり、ファイル作成日時を示します。Unix系のctimeはWindows系ではEntry Modifiedに相当します。この時間情報はエクスプローラのプロパティなどでは表示されず、参照する場合は専用ツールが必要となります。通常はWindows系のファイルの時間情報もmactimeと呼ばれていたりしますが、頭文字をとってMACEtimeとも呼ばれることもあります。

以下の論文で、NTFSにおけるMACEtimeの更新ルールについて述べられています。

The Rules of Time on NTFS File System
http://i.cs.hku.hk/~cisc/forensics/papers/RuleOfTime.pdf

ルールを抜粋して以下に記載します。

  • MtimeとCtimeが同じ場合、修正されておらず別ディスクからコピーもされていない
  • MtimeがCtimeよりも前の場合、ファイルはシステム内外でコピーされたかパーティションを超えて移動された
  • あるフォルダ内でMtimeがCtimeより前で非常に近い時間の場合、ファイルはバッチ処理でコピー、移動されたか圧縮ファイルから展開された
  • 多数のファイルのAtimeがそれぞれ近い時間の場合、アンチウイルスソフトなどのツールによってスキャンされた
  • フォルダ内のメディアファイルのAtimeが近い時間で、別のメディアファイルとは時間が離れている場合、それらはプレビューツールでアクセス、オープンされている
  • フォルダ内のファイルでAtimeがそれぞればらばらであれば、個別にアクセスされた可能性が高い
  • フォルダ内のファイルのMtimeとCtimeが同一でファイル同士で非常に近い場合、ネットワーク経由でバッチ処理でダウンロードされた