ハードリンクとは
ハードリンクは、
ファイルシステム上のファイルや
ディレクトリといった資源と、それらに付けられた名前を結びつける仕組み、またはその結びつき自体のことです。ファイルには少なくとも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の削除や名前変更はできません。
まとめ
ハードリンクはファイルシステムにおける重要な概念であり、ファイルの共有や管理に役立ちます。その仕組みを理解することで、ファイルシステムの挙動をより深く理解することができるでしょう。
関連項目
ソフトリンク