Linuxは移動コマンドをどのように処理しますか


12

Linuxは内部でmoveコマンドをどのように処理しますか?

ホームディレクトリを移動したとしましょう

/home/me

これを別のディレクトリに移動します

/home/foo/me

すべてのファイルとディレクトリのパスはどのようにme変更されますか?私は私の知っているDesktop下のdirが me今である/home/foo/me/Desktopだけでなく、Documents /home/foo/me/Documentsしかし、ファイルシステムを明示的に下のすべてのパスを更新しないme変更を反映するために?これはあまり効率的ではないようで、おそらくこれではないでしょう。

これに関する詳細情報はどこで入手できますか?


5
効率について:いいえ、それは効率的ではありません。データを別のディレクトリに移動すると、データは実際には1つの場所で読み取られ、別の場所に書き込まれません。ファイルシステムには、データブロックへのポインタのセットが含まれています。移動の場合、ポインターだけが更新されます。
ジョス

ああ、それは...ジェフが何を意味するのか、おそらくです
ヤコブVlijm

@Jos断片化はどこから来るのですか?
zero298 14年

3
@ zero298いいえ、断片化は一般に完全に異なり、無関係な問題です-断片化はフォルダー構造の内容ではなく、単一のファイルの内容が物理的なディスクプラッター全体に分散しているためです(単一の連続した線ではなく)そのようなファイルの/ writeパフォーマンス。大/深/分岐フォルダツリーのコンテンツは、通常、連続しているとは思われず、そのように移動します。
ペティス

回答:


21

フォルダの移動方法を理解するには、Linuxでのファイルシステムについて少し理解する必要があるかもしれません。すべてのファイルとフォルダーは、「inode」と呼ばれるデータ構造の一部として保存されます。各ファイルにはiノード番号があり、フォルダーにもあります。

フォルダのiノードを表示するには、コマンドを使用しますls -ial foldername。最初の列は、ファイルのiノード番号を示しています。各フォルダには、それぞれ独自のディレクトリと親ディレクトリを表す2つの一意の名前.とがあります..

サブディレクトリとファイルを含むディレクトリ(/ home / me / sourceなど)を別のディレクトリ(/ home / me / somewhere / elseなど)に移動する実験を試すことができます。/ home / me / sourceのiノード番号とそのすべての内容は、移動の前後で同じままです。唯一の違いはのiノード番号です..。これは元々/ home / meのiノード番号を共有し、現在は/ home / me / somewhere / elseのiノード番号になります。簡単な言い方をすれば、Linuxはディレクトリソースへのリンクを更新してから完了です。

とにかく、ハードディスクの内容は変更されず、フォルダが移動されるとiノードインデックスのみが更新されます。もちろん、フォルダを別の物理的な場所に移動する場合はそうではありません。


3
右、ファイルシステムの境界を越えない限り。
小次郎

3

mvやなどのプログラムがどのように動作するかに興味がある場合cpは、それらがオープンソースであることを忘れないでください。コードを読むことで最も正確な説明を得ることができます。ここでは、すべてのコアユーティリティへのリンクがあります。具体的には、ここでmvを見つけることができます


6
you can get the most accurate explanation by reading through the code.失礼ですが同意できません; 長い間、私はCの経験がまったくなかったし、今でもそれを好まない。また、ソースコードは多くの場合最適化されており、必要以上に多くのエッジケースが含まれています。多くの場合、シンボリックな説明が役立ちます。
Shelvacu

1
@shelvacuには「必要以上のエッジケースが含まれています」。堅牢なコード、存在する可能性のあるすべてのエッジケースを処理します。ただし、コンセプトの最初の説明ですべてのエッジケースを提示する必要はないかもしれません。
オレゴントレイル

@OregonTrail申し訳ありませんが、コードがより多くのエッジケースが、その後の説明のためのニーズいるた、私が何を意味するのかということ
Shelvacu

それがあなたの最初の感情だったのはうれしいですが、あなたはまだ「ハンドル」の私の強調を見逃しているようです。よく書かれたコードにはエッジケースがなくエッジケースを処理します。;)ここから正しい場所から来ていることは知っていますが、動詞には注意する必要があります。
オレゴントレイル14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.