ハードリンク
読み:ハードリンク
外語:hard link

 ファイル名をディスク上のデータと結び付ける仕組みの一つ。
目次

概要
 UNIXでは、ファイルを作成する際、ファイルを構成するブロックが確保される。これをディレクトリエントリという特殊なファイルに記載し、ファイル名と対応付ける操作が行なわれる。狭義には、これを(ハード)リンクという。
 新たにファイルを作成せず、既存のファイルを参照する別のディレクトリエントリを作成することで、一つのファイルに異なる名前を付けることも可能となる。一般には、このようにファイル名によってアクセスできるファイルは、一つ以上のハードリンクを持っている。
 Windows 2000以降のファイルシステムであるNTFS 5.0でも採用された。しかし、あまり使われていない。なお、FATでも理論上は可能である(後述)。

特徴

UNIX
 現在のUNIXでは(広義の)ハードリンクに対応したファイルシステムが採用され、この機能が広く用いられている。

リンク
 ハードリンクでは、一つのファイルに複数のリンクを付ける事が可能である。
 またその各々の名前は互いに平等であり、どれか一つがそのファイルの本当の名前で他は別名、などということはない。
 シンボリックリンクの場合は単に別名の情報なので、リンクを削除しても削除されるのはリンクのみであるが、ハードリンクの場合はリンクを削除すると実体も削除される。

使途
 一つのファイルに異なる名前を付けると、プログラムの処理で、自分がどの名前で呼び出されたかを判別して動作を変えることができる。
 例えば、ファイル圧縮プログラムであるgzipは、gunzipという名前で実行されると圧縮ではなく伸張を行なう。また日本語化されたperlであるjperlは、perlという従来の名前で実行されると日本語拡張機能を初期状態で無効にする。

inode番号
 ディレクトリエントリからのリンクがどのファイルを指すかは、ファイルの持つinode番号(index node番号)という情報で識別される。
 これはディスク毎に一意な値であるため、異なるディスクのファイルに対してはハードリンクを行なうことはできない。

リンクの数
 ファイルを作成した際に名前が付くため、ハードリンクの数は初期状態で1となる。
 ディレクトリの場合は、自分の名前と親ディレクトリからのリンクがあるために、リンク数は最低でも2となる。
 明示的に別の名前でハードリンクを行なうと、ファイルの持つリンク数が増えていく。
 OSに対してファイル削除の指令(unlinkシステムコール)を行なうと、ファイルのリンク数が1つ減ずる。リンク数が0になると、そのファイルの使用していた領域は未使用状態になる。つまり、複数の(ハードリンクによる)名前を持つファイルは、それらの名前全てが削除されない限りディスクに残り続ける。

FAT
 MS-DOSなどで使われたFATでも、原理的にはハードリンクが可能である。ただし、MS-DOS自体は対応していない。ディスクの管理領域を、自己責任で書き換えることで実現できる。
 既に作られたファイルの実体がディスク中にあるとして、別のディレクトリにそのFAT位置を示したディレクトリエントリを作れば良い。OS自体は対応していないため、全て手動で行なう必要がある。
 問題もあり、どこか一箇所からでも削除されると、実体が消えてしまうため、他の場所には実体のないディレクトリエントリだけが残ってしまう。

再検索