UNIXなどにおいて、ファイル名をディスク上のデータと結び付ける仕組みのこと。
UNIXでは、ファイルを作成する際、ファイルを構成するブロックが確保される。これをディレクトリエントリという特殊なファイルに記載し、ファイル名と対応付ける操作が行なわれる。狭義には、これを(ハード)リンクという。
新たにファイルを作成せず、既存のファイルを参照する別のディレクトリエントリを作成することで、一つのファイルに異なる名前を付けることも可能となる。一般には、このようにファイル名に複数の名前を付けることをハードリンクという。
Windows 2000以降のファイルシステムであるNTFS5でも採用された。しかし、殆ど使われていない。なお、FATでも理論上は可能である。
現在のUNIXでは(広義の)ハードリンクに対応したファイルシステムが採用され、この機能が広く用いられている。
一つのファイルに異なる名前を付けると、プログラムの処理で、自分がどの名前で呼び出されたかを判別して動作を変えることができる。
例えば、ファイル圧縮プログラムであるgzipは、gunzipという名前で実行されると圧縮ではなく伸張を行なう。また日本語化されたperlであるjperlは、perlという従来の名前で実行されると日本語拡張機能を初期状態で無効にする。
ディレクトリエントリからのリンクがどのファイルを指すかは、ファイルの持つinode番号(index node番号)という情報で識別される。
これはディスク毎に一意な値であるため、異なるディスクのファイルに対してはハードリンクを行なうことはできない。
ファイルを作成した際に名前が付くため、ハードリンクの数は初期状態で1となる。
ディレクトリの場合は、自分の名前と親ディレクトリからのリンクがあるために、リンク数は最低でも2となる。
明示的に別の名前でハードリンクを行なうと、ファイルの持つリンク数が増えていく。
OSに対してファイル削除の指令(unlinkシステムコール)を行なうと、ファイルのリンク数が1つ減ずる。リンク数が0になると、そのファイルの使用していた領域は未使用状態になる。つまり、複数の(ハードリンクによる)名前を持つファイルは、それらの名前全てが削除されない限りディスクに残り続ける。
MS-DOSなどで使われたFATでも、原理的にはハードリンクが可能である。
既に作られたファイルの実体がディスク中にあるとして、別のディレクトリにそのFAT位置を示したディレクトリエントリを作れば良い。
但し問題もあり、どこか一箇所からでも削除されると、実体が消えてしまうため、他の場所には実体のないディレクトリエントリだけが残ってしまう。