開いたファイルはLinuxシステムでどのように機能しますか?

開いたファイルはLinuxシステムでどのように機能しますか?

ログファイルの名前を「foo.log.old」に変更し、アプリケーションが「foo.log」に新しいログファイルを書き始めるとします。私はログファイルを追跡して新しい名前を見つけ、「foo.log.old」に行を追加し続けることに驚きました。

私はWindowsでのこの動作に精通していません。実装が可能かどうかわかりません。この動作はLinuxでどのように実装されていますか?これについてもっと学ぶことができる場所はどこですか?

ベストアンサー1

プログラムはファイルシステム(既存のUNIXファイルシステムではinodeと呼ばれます)によって保持される番号でファイルにリンクされています。

したがって、次の点に注意を払う必要があります。

  1. ファイル移動を使用しても、mvこのサブ番号はファイルシステム間で移動しない限り変更されません(元のファイルシステムでthenを使用するのと同じcp)。rm
  2. 複数の名前を1つのファイルに関連付けることができるため(つまり、ハードリンクがあるため)、「削除された」ファイルのデータは次回まで消えません。みんな基本ファイルへの参照は消えます。
  3. おそらく最も重要なことは、プログラムがopenファイルにアクセスするときにファイル名をファイルに関連付けるのと同じように(データを削除するために)ファイルを参照することです。

これにより、次のようないくつかの動作が発生します。

  • プログラムはopenファイルを読み取ることができますが、rmユーザーがコマンドラインで編集するまでは実際には読みません。プログラムはまだデータにアクセスできます。
  • あなたが直面しているものは次のとおりです。mvファイルを呼び出しても、ファイルを開くプログラムからファイルが切断されません(ファイルシステムの境界を超えない限り、この場合、プログラムはまだ元のバージョンを使用できます)。
  • openプログラムが書き込み用にファイルを編集し、ユーザーがコマンドラインに最後のrmファイル名を入力した場合、プログラムはファイルにコンテンツを保存できますが、閉じるとデータは参照されなくなり消えます。
  • 1つ以上のファイルを介して通信する2つのプログラムは、完了したらファイルを削除しておおよその部分的なセキュリティを得ることができますopen。 (これではありません実際セキュリティ認識は、脆弱性を競合状態に移行します。 )

おすすめ記事