web-dev-qa-db-ja.com

ハードリンクとコピーされたファイルの違いは何ですか?

私の理解では、ハードリンクには元のファイルのコピーが含まれており、ハードリンクされたファイルを1つの場所で削除しても、他の場所には存在します。

その場合、なぜハードリンクを使用したいのですか?なぜ2つの別々のファイルがないのですか?

25
Mike B

ファイルをコピーすると、コンテンツが複製されます。したがって、1つのファイルの内容を変更しても、他のファイルには影響がありません。

ハードリンクを作成すると、同じコンテンツを指すファイルが作成されます。したがって、どちらかのファイルのコンテンツを変更すると、両方のファイルに変更が反映されます。

33

ハードリンクは、基本的に同じファイルの2番目のファイル名です。したがって、ファイルをハードリンクした場合、ファイルシステム上で1回だけなので、スペースを1回しか使用しません。したがって、ディスクスペースを節約したい場合は、これを使用します

16
Peter

UNIXファイルシステムでは、すべてのファイル名は、実際には、iノードと呼ばれる、ディスク上のデータの場所へのハードリンクです。既存のファイルへの新しいハードリンクを作成する場合、それは同じデータへの単なる別のポインタであるため、ディスク上に余分なスペースを必要としません。 1つまたは他のリンクでデータを編集(またはiノードを直接編集)すると、両方のファイルが変更されます。

システムは、各iノードが持つハードリンクの数をカウントします。リンクカウントが0の場合、ファイルに到達できなくなり、データは上書き可能とマークされます。したがって、2つのハードリンクを持つファイルが与えられた場合、どちらかのリンクを削除しても、データは削除されません。両方を削除した場合にのみ、データが失われます。

-iスイッチをlsコマンドに使用すると、ファイルのiノード番号を確認できます。

一方、ソフトリンクは、ファイル名で別のファイルを指します。元のファイルを移動または削除すると、リンクが壊れます。

6
rjmunro

「なぜハードリンクを使用したいのですか?」という質問の部分を参照してください。

ハードリンクされたファイル(または、ソフト(シンボリック)リンクされたファイル)は、さまざまな目的で偽装できる単一の実行可能ファイルを作成する便利な方法を提供します。

つまり、コードが呼び出されるnameを調べて、実行に使用できるオプションを判別できます。これにより、わずかに異なる目的に必要なすべての共有機能を備えた1つの大きなコードの開発とパッケージ化が可能になります。ユーザーの観点から見ると、実行する "何"を(名前で)指定すると、選択肢と表示がより扱いやすいオプションのサブセットに制限されます。

典型的な例はLVMです。 HP-UXはかつて、さまざまな実行可能ファイル(vgdisplayvgcreatevgextendなど)にハードリンクされたファイルを使用していました。今日、Linuxと同様に、これらのコマンドは実際にはシンボリックです(ソフト)lvm実行可能ファイルへのリンク。

1
JRFerguson