作業ディレクトリを移動するとき、Bashはどのように正しく機能しますか?

作業ディレクトリを移動するとき、Bashはどのように正しく機能しますか?

Linuxでは、あるディレクトリを別のディレクトリに移動し、mv別のシェルでは作業ディレクトリが移動されたディレクトリになります。

そのシェルで実行hg pullしましたcd

どのように動作しますか?

ベストアンサー1

ファイルまたはディレクトリを移動すると、ファイルツリー内の対応する親エントリを識別するメタデータ属性が変更されますが、実際のノードIDは変更されません。物理ディスクではまだ同じ場所にあり、ファイルシステムはそれをまだ同じオブジェクトと見なします。ファイルまたはディレクトリポインタが開かれている場合は、どこでもすでにオブジェクトに接続されており、オブジェクトのメタデータへの変更は開くプロセスには影響しません。ファイルシステムパスに基づいて新しいポインタを開こうとすると、問題が発生します。

同じ理由で、書き込み中のファイルを移動でき、書き込みは新しい場所に進みます。これは、実際には同じファイルノードであり、ファイル構造内の別の場所に再接続されるためです。ディスクの物理的な場所やノードIDは変更されず、ファイルシステムは単にディスク上のノードの内部マッピングをファイルシステムのパスに更新します。

また、この動作は、移動されたオブジェクトが同じファイルシステムにある場合にのみ適用されます。あるインストールから別のインストールに移動すると、ノードの物理的な場所を変更する必要があり、オブジェクトは元のファイルシステムから削除され、デッドポインタが残ります。

おすすめ記事