トップ 差分 一覧 ソース 検索 ヘルプ RSS ログイン

技術的雑談-ディレクトリのタイムスタンプ

技術的雑談-ディレクトリのタイムスタンプ


 環境

  • 使用OS:Linux RHEL3

 現象

  • ディレクトリのタイムスタンプはどんな時に更新されるのか?

 検証結果


結論:ディレクトリのタイムスタンプは、直下のファイル/ディレクトリの追加・削除があったときに更新される。

実証:

(1) ディレクトリを作り、その下にファイルを作成・削除

$ date
Mon May  1 17:23:01 JST 2006
$ ls
   <何も無い>
$ mkdir abc
$ ls -l
drwxr-xr-x    2 hoge fuga        4096 May  1 17:23 abc ←ディレクトリができた
$ cd abc
$ date
Mon May  1 17:25:01 JST 2006
$ touch aaa  ←新しいディレクトリ下にファイルを作成
$ ls -l
-rw-r--r--    1 hoge fuga           0 May  1 17:25 aaa
$ cd ..   ←親ディレクトリに戻る
$ ls -l
drwxr-xr-x    2 hoge fuga        4096 May  1 17:25 abc
   ↑親ディレクトリのタイムスタンプが変わっている
$ date
Mon May  1 17:26:01 JST 2006
$ rm abc/aaa
$ ls -l
drwxr-xr-x    2 hoge fuga        4096 May  1 17:26 abc
   ↑親ディレクトリのタイムスタンプが変わっている

(2)ディレクトリ下のファイルを更新する

$ date
Mon May  1 17:27:28 JST 2006
$ touch abc/aaa  ←ファイルのタイムスタンプを変える
$ ls -l abc/aaa
-rw-r--r--    1 hoge fuga           0 May  1 17:27 abc/aaa
$ ls -l
drwxr-xr-x    2 hoge fuga        4096 May  1 17:25 abc
  ↑でも、親ディレクトリのタイムスタンプは変わらない

(3)ディレクトリ下に更にディレクトリを作る

$ date
Mon May  1 17:34:28 JST 2006
$ mkdir abc/def  ←ディレクトリ下にディレクトリを作る
$ ls -l abc/  ←新しいディレクトリのタイムスタンプを調べる
drwxr-xr-x    2 hoge fuga        4096 May  1 17:34 def
$ ls -l  ←親ディレクトリのタイムスタンプを調べる
drwxr-xr-x    3 hoge fuga        4096 May  1 17:34 abc
  ↑変わっている

(4)ディレクトリの下にディレクトリを作り、そこにファイルを作る

$ date
Mon May  1 17:35:56 JST 2006
$ touch abc/def/xyz
$ ls -l abc/def/xyz  ←新しいファイルのタイムスタンプ
-rw-r--r--    1 hoge fuga           0 May  1 17:36 abc/def/xyz
$ ls -l abc/  ←子ディレクトリのタイムスタンプ
drwxr-xr-x    2 hoge fuga        4096 May  1 17:36 def
  ↑変わっている
$ ls -l .  ←親ディレクトリのタイムスタンプ
drwxr-xr-x    3 hoge fuga        4096 May  1 17:34 abc
  ↑変わっていない

 推測

ディレクトリとは、「ディレクトリ内のファイルインデックスを持つファイル」と解釈できる。
ディレクトリの直下の構成要素を追加・削除した場合はインデックスの内容が変化するのでディレクトリのタイムスタンプは変わる。

しかし、一度作成されたファイルの変更は、そのファイル自身のタイムスタンプは変化するが、それのあるディレクトリのインデックスには何ら影響しないのでディレクトリのタイムスタンプは変化しない。

もっと踏み込んで言えば、タイムスタンプはiノードそのものに付随するステータスである。
iノードはディレクトリでもファイルでもそれぞれ固有のものを持っている。

ただ、このあたりの仕組みが、ファイルシステムの種類、OSの種類などに依存するのか不明な為、必要であるなら検証してみたほうが無難だと思われる。
(個人的な推測では「iノード」というものがOSのVFS(バーチャルファイルシステム)の構造体に含まれるものの為、少なくとも同じOSであれば同様の動作をするのではないかと思われる。)

 履歴

2006/5/1 -- 初版

技術的雑談へ戻る

 突っ込み

name   comment  
URL (入力するとす ぱ むとみなします!)


技術的雑談へ戻る

TrackBack

TrackBack URL for this entry:
http://www.himajin2001.com/fswiki/tb.cgi/%B5%BB%BD%D1%C5%AA%BB%A8%C3%CC%2D%A5%C7%A5%A3%A5%EC%A5%AF%A5%C8%A5%EA%A4%CE%A5%BF%A5%A4%A5%E0%A5%B9%A5%BF%A5%F3%A5%D7

技術的雑談へ戻る

最終更新日時:最終更新時間:2006年05月01日 17時47分31秒
トップページに戻る