【ハードリンク とシンボリックリンク


このHPはハードリンク とシンボリックリンクについてまとめたものです。

 

1-1 ハードリンクとシンボリックリンク

Linuxではファイルをディスクに保存すると、重複しないiノード番号が割り当てられる。 全てのファイルには、対応するiノードが存在し、iノードにはディスク上のファイルに 関する情報が格納されている。

Linuxのファイルシステムでは、ファイルの実体がiノード内に記録された iノード番号によって管理されている。





この仕組みを利用して、1つの実体に複数の名前でアクセスできるようにする 『ハードリンク』という機能がLinuxには用意されている。 また、これと似た仕組みとして、特殊なファイルを使うことで特定のファイルへ アクセスするための『シンボリックリンク』という機能も用意されている。

 

1-2 ハードリンク

ハードリンクはファイルの実体(ディスク上に保存されているデータ)に複数の名前を割り当てる機能。 複数のハードリンクがある場合、ファイルに対してはどのリンクも同じ扱いになる。

またハードリンクは、どちらもiノードが同じなため、元のファイルとリンクとして作成した ファイルの区別がつけられない。 ハードリンクの場合は、同一の実体に対して変更を加えると、いずれかの変更は他方に反映される。また、全てのハードリンクが 削除されるまでファイルの本体は削除されない。

注意点としては、異なるファイルシステムやディレクトリに対してはハードリンクを作成することができない。







1-3 シンボリックリンク

シンボリックリンクはハードリンクと違って、ファイルの本体の位置情報を保管しているファイルで、ファイルの本体とは完全に区別されている。シンボリックリンクは、ファイルだけでなくディレクトリに対しても作成することができる。 また、ハードリンクのような制限がなく、異なるファイルシステムをまたぐリンクも作成することが可能。

WindowsのショートカットやMacOSのエイリアスに近いもの。 ただしシンボリックリンクは、ファイル本体とはまったく別ファイルのため、シンボリックリンクを残したままリンク元のファイル本体を削除できてしまう。 この場合、本体が削除されたシンボリックリンクにアクセスするとエラーとなってしまう。 シンボリックリンクされている状態は「ls -l」などと指定してみると把握できる。







1-4 ハードリンクとシンボリックリンクの作成

ハードリンクやシンボリックリンクを作成するには、『ln』コマンドを使う。

{書式}  ln【オプション】リンク元(実体)リンク名



オプションなしで実行した場合、ハードリンクが作成される。シンボリックリンクを作成するには-sオプションを使う。

以下の例では、test.txtファイルのハードリンク testhard1と、シンボリックtestsym1を作成している。

 



 

lsコマンドに-lオプションをつけて実行すると、シンボリックリンクの場合はアクセス権の表示の前にリンクを現す『l』とリンク元が表示される。 また、有ユーザーの前にある数(ここでは2)はハードリンクの数を表す。