ディレクトリは、(概念的に)名前のリストと、それらの名前が指すiノード番号を含む特別な「ファイル」です。一部の名前はサブディレクトリにすることができます。..
親ディレクトリを指す特別なエントリがあります。
したがって、ファイルの名前を明確に変更するのは簡単です。ディレクトリエントリの名前を変更するだけで、それ以外は何も変更しません。これは、ファイルが実際にファイルであるか、別のディレクトリのコンテンツを保存するために使用される「ファイル」であるかを保持します。実際、同じrename
syscallが両方を実行します。
ただし、コピーはそれほど簡単ではありません。あなたは可能性があり、単にディレクトリ「ファイル」をコピーしたが、その後、あなたは、ファイルが(彼らはハードリンクだろう)は同じである2つのディレクトリを持っていると思います。ディレクトリへのハードリンクを許可するシステムがあれば、それらは許可されますが、少なくとも非ルートに対しては許可されていないため、各サブディレクトリに対してそのコピーを実行する必要があります。あなたが実際に頼むことができるcp
と、この動作のためにcp -lR
:-l
ハードリンクのために、-R
その再帰のために。
しかし、すべてをリンクしたままにすることは、おそらくあなたが望むものではありません。代わりに、cp
各ファイルをコピーします。これはかなり高価な操作です。各ファイルはメモリに読み込まれ、2番目の場所のディスクに書き戻される必要があります。実際には、ファイルを開いたり、読み込んだり、書き込んだり、閉じたりするために、いくつかのsyscallが必要です。これは、各ファイルに対して繰り返す必要があります。
従来のファイルシステムもディスク上でこのように機能します。個々のファイルを個別に調べてコピーする以外に、大量のファイルをコピーする方法はありません。これらは、基本的なコマンドラインユーティリティが設計されたときに使用されていたファイルシステムのタイプです。
mv
ファイルシステムから別のファイルシステムに同じ「ディレクトリエントリの名前を変更するだけ」ですか?