ハードリンク

ハードリンクとは



ハードリンクは、ファイルシステム上のファイルやディレクトリといった資源と、それらに付けられた名前を結びつける仕組み、またはその結びつき自体のことです。ファイルには少なくとも1つのハードリンクがあり、複数のハードリンクを持つことで、異なる名前で同一のファイルにアクセスできます。

ハードリンクの仕組み



UNIX系システムでは、すべてのファイルやディレクトリにinodeという固有のIDが割り当てられています。ハードリンクとは、この同じinodeを指す複数のファイル(またはディレクトリ)のことです。新しいハードリンクを作成すると、同じ実体データへのアクセス経路が増えることになります。

たとえば、`A.txt`というファイルに対して、`B.txt`というハードリンクを作成すると、どちらのファイルから変更を加えても、実体データが同一のため、変更は両方のファイルに反映されます。これは、あたかもソフトリンク(シンボリックリンク)のように見えますが、ソフトリンクとは異なり、ハードリンクは実体を直接参照します。

ソフトリンクの場合、リンク元のファイルが名前変更や移動をするとリンクが無効になりますが、ハードリンクの場合、オリジナルファイルは単に最初に作られたハードリンクに過ぎず、後から作られたハードリンクと区別はありません。したがって、どれか一つのハードリンクを削除しても、他のハードリンクは有効なままです。

ハードリンクとファイル削除



複数のハードリンクを持つファイルシステムでは、ファイルを削除するというのは、ハードリンクを削除することを意味します。ファイルシステムはハードリンクの参照カウントを管理しており、参照するハードリンクがなくなった時点で初めてファイルの実体が削除されます。

ハードリンクの制限



ハードリンクはファイルシステムの機能に深く依存しているため、異なるボリューム間でのハードリンク作成は原理的に不可能です。

ハードリンクの利用



ハードリンクは、主にソフトリンクが普及する以前のUNIXシステムで利用されていました。現在では、NTFSやHFS+などのファイルシステムでも実装されており、多くのオペレーティングシステムで使用できます。しかし、ファイルに別名をつける目的では、異なるボリューム間でも作成可能で管理が容易なソフトリンクがよく利用されています。

UNIXにおけるハードリンク



UNIX系システムでは、各ディレクトリが以下の3種類のハードリンクによって参照されています。

ディレクトリからそのディレクトリを参照するための名前(例: `tmp`)
そのディレクトリ自身を参照するための名前(`.`)
ディレクトリからそのディレクトリを参照するための名前(`..`)

特に、`..`のハードリンクは、そのディレクトリが持つ子ディレクトリと同数が存在します。

Windowsにおけるハードリンク



Windowsでは、Windows NT 3.1からファイルに対するハードリンクをサポートしています。Windows XP以降では、コマンドプロンプトで以下のコマンドを使用します。


fsutil hardlink create "新しく作られるファイルのパス" "元データとなるファイルのパス"


ハードリンクのロック



複数のハードリンクを持つファイルを開いている場合、ファイル操作はロックされます。例えば、ファイルXがディレクトリAとディレクトリBにハードリンクされているとき、ディレクトリAからファイルXを開いている間は、ディレクトリBにあるファイルXの削除や名前変更はできません。

まとめ



ハードリンクはファイルシステムにおける重要な概念であり、ファイルの共有や管理に役立ちます。その仕組みを理解することで、ファイルシステムの挙動をより深く理解することができるでしょう。

関連項目



ソフトリンク

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。