ディレクトリタイムスタンプ?

ディレクトリタイムスタンプ?
  1. ディレクトリのmtimeについては、Stéphane Chazelasの答えです。 https://unix.stackexchange.com/a/187231/674

    他のファイルと同様に、ディレクトリ(ディレクトリをフォルダではなくディレクトリ(電話帳のような名前/番号マッピングリスト)と呼ぶ方法に注意)の変更時間は、内容が変更されるたびに更新されます。

    つまり、ファイルが追加(リンク)、削除(リンク解除)、または名前が変更された場合です。

    これは、サブファイルに関連するディレクトリの内容がサブファイルのファイル名とサブファイルへのハードリンクの数だけであることを意味しますか?

    そうでない場合は、親ディレクトリの内容に子ファイルに関するその他の情報がありますか?

    つまり、子ファイルの内容を変更すると、親ディレクトリのmtimeも変更されますか?

  2. ディレクトリのatimeはいつ変更されますか?ls -l、ctimeはls -ldすべてcdディレクトリのctimeを変更していないことがわかりました。私はコマンドがディレクトリの内容を表示するので、ディレクトリの内容を読むと思いました。

  3. ディレクトリのctimeはいつ変更されますか?

ありがとうございます。

答え1

ディレクトリを次のテキストファイルとして扱います。

123:foo.txt
234:bar.txt
123:other-name-for-foo.txt

それがすべてです(少なくとも既存のUnixファイルシステムでは)。

foo.txt一つでもない子供排他的な関係ではないので、ディレクトリ名です。 inode番号が123のファイルだけが、このディレクトリの2つのエントリ(withfoo.txtと)で参照されますother-name-for-foo.txt

この2つのディレクトリエントリは、2つのディレクトリエントリとも呼ばれます。硬い同じファイルに接続します。

$ touch foo.txt bar.txt
$ mkdir other-dir
$ ln foo.txt other-name-for-foo.txt
$ ln foo.txt other-dir/whatever
$ ls -i . other-dir
.:
58892735 bar.txt  58958143 other-dir/
58879562 foo.txt  58879562 other-name-for-foo.txt

other-dir:
58879562 whatever

.other-dir2種類のファイル目次、それぞれに複数のディレクトリエントリが含まれています。ls名前が始まらず、inode番号を含むディレクトリエントリを一覧表示し.ます-i

-aこれは(ドットファイルを含む)と-i()を使用してls -ai内容を多少ダンプします。テキストファイル上記ですでに述べた。

上記のinode 58879562ファイルが1回other-dirと2回リンクされていることがわかります.。 58879562ファイルのリンク数は3つですが、それも.気にしませんother-dir。この情報はファイルの inode に保存され、ファイルがディレクトリに接続された回数を追跡するためにシステムでのみ使用されます。数字が0に下がると、ファイルが占有するディスク容量を回復できます。

inodeの番号と名前に加えて、ディレクトリにはファイルのファイルタイプも含まれています(通常は/fifo/directory/symlink/device...、しかしすべてのファイルシステムには当てはまりません)。この情報は(インデックスノードに格納されているため)他の方法で取得できるため、必要ありません。これは主に最適化の目的で可能であるためです。これは、他のメタデータとは異なり、ファイルタイプを変更できないために可能です。したがって、ディレクトリに保存された情報は現実と同期しません。

また、ファイルを削除するためのシステムコールではないこともわかりremove("/foo/bar")ますunlink("/foo/bar")。その理由は、ディレクトリbarからエントリを削除するだけだからです。/foo解く barから/foo。ファイルはまだ名前が異なる別の(または同じ)ディレクトリに接続されている可能性があります。リンク数が0に達した場合(もはやどのディレクトリにも接続されていない場合)にのみ削除されます。

ls操作を実行してもディレクトリのアクセス時間が更新されないのは、おそらくファイルシステムがまたはnoatimeオプションrelatimeでマウントされたためです。

ファイル(ディレクトリなど)を読み取るたびにアクセス時間を更新するのは高価であるため、多くのシステムがこの慣行を放棄します。

システム(ユーザー以外の場合)は常にディレクトリを読み取ります。

たとえば、アクセスするときは、/foo/barシステムは内容を読み取って検索/し、再度検索する必要があります(ほとんどの場合、この情報はキャッシュされています)。ただし、この場合、atimeは更新されません(ありがたいことに)。ユーザースペースプロセスfoo/foobar明らかに次のディレクトリの内容をお読みくださいls

ディレクトリのディレクトリが更新された場合は、ctime通常のファイルと同じです。コンテンツが変更されるか(項目の追加、削除、または名前の変更)、メタデータ(atime読み取り時を除く)(例:chmod/ chown、ACLの変更)が変更されます。 ..).

関連情報