0

ここでの「独自性」とは、時間にも関係します。

  • ファイルシステム上にファイルが作成されるたびに、一意のファイルがあります。
  • 同じディレクトリにある同じ名前のファイルで、異なるタイムステージに表示されるファイルは異なります。
  • 「一意」の定義は、ファイルの内容とは何の関係もありません。

まず、iノードを使用してファイルを識別します。iノードが異なるファイルは異なります。ファイルは、移動したり触れたりしても、ライフサイクル内で常に固定のiノードを持っています。

ただし、iノードはOSによって再利用される場合があります。ファイルA.txtにinode22345がある場合、A.txtを削除してB.txtを作成すると、B.txtはode22345にある可能性があります。

ファイルの作成時間がある場合はどうなりますか?これにより、inode+creation-timeを使用してファイルシステムの履歴内のファイルを識別できます。しかし、Linuxはそれを提供しませんでした。

inode + file_md5も試しますが、A.txtとB.txtの内容が同じ場合はどうなりますか?

それで、何かアイデアはありますか?

===========編集===========

私のシナリオは、一種のログファイル収集です。ロギングディレクトリでは、ログファイルが作成、移動、および削除される場合があります。ファイルオフセットからタイムスタンプへのマッピングを使用して、作業のような「チェックポイント」を実行します。では、今述べた「ファイル」をどのように汚すのでしょうか。

4

1 に答える 1

4

通常、inode 番号に加えて、1 はデバイス番号も比較します。これは、2 つの異なるファイルシステム上の 2 つのファイルが同じ inode 番号を持つ場合があるためです。

とにかく、inode/dev 番号を比較することは、「これら 2 つのファイル記述子は同じファイルを参照していますか?」という質問に答える方法です。質問で「パス」ではなく「ファイル記述子」を使用していることに注意してください。これにより、パスが後で削除された場合に競合が回避されます。ご指摘のとおり、inode 番号は、アクティブな参照 (パスおよび/または何らかのプロセスによって開かれている) がある場合にのみ、一意であることが保証されます。

あなたの場合、1 つの解決策は、関心のあるファイルの inode/dev 番号を追跡し、ファイルが削除された場合はリストから削除することだと思います。あなたが本当に達成しようとしていることはわかりませんが。

于 2012-11-01T07:30:51.307 に答える