シンボリックリンクは、別の扉を使ってくださいと書いた張り紙を扉の上に残しておく。
ハードリンクは、同じ部屋にさらに別の扉をもう1つ直接取り付けてしまうようなもの。
シンボリックリンク ln -s
$ ln -s fig0403.pdf fig0403_copy2.pdf
-
張り紙をして「必要な情報はここではなく、ファイルXXX内にある」と書いておくようなもの
-
指し示している対象を移動しようが、名称変更しようが、削除しようが、リンクの方はそのまま残る。
-
注意しなければならないのは、参照されなくなったシンボリックリンクをシステムが自動的に消してくれるわけではないこと。無駄なシンボリックリンクが残ってしまわないよう注意しなければならない
ハードリンク ln
$ ln fig0403.pdf fig0403_copy2.pdf
-
実質、同一のファイル内容に対して、別のファイル名を作成してしまう。
-
「fig0403.pdf」ファイルに対してハードリンクを作成しておけば、元のファイル名を削除してしまっても、ハードリンクの方は残るので、新たにハードリンクで付けた別名の方を使って、消したはずの内容を利用し続けることができる。
-
ハードリンクは同一ボリューム内でしか使えない。
例
$ cd tmp/
$ ln 0596009151.gif 0596009151_copy.gif
$ ls -l
total 1056
-rw-r--r--@ 2 oreilly staff 267646 2 17 23:42 0596009151.gif
-rw-r--r--@ 2 oreilly staff 267646 2 17 23:42 0596009151_copy.gif
$ ln -s 0596009151.gif 0596009151_copy_s.gif
$ ls -l
total 1064
-rw-r--r--@ 2 oreilly staff 267646 2 17 23:42 0596009151.gif
-rw-r--r--@ 2 oreilly staff 267646 2 17 23:42 0596009151_copy.gif
lrwxr-xr-x 1 oreilly staff 14 2 17 23:44 0596009151_copy_s.gif -> 0596009151.gif
$ rm 0596009151.gif
$ ls -l
total 536
-rw-r--r--@ 1 oreilly staff 267646 2 17 23:42 0596009151_copy.gif
lrwxr-xr-x 1 oreilly staff 14 2 17 23:44 0596009151_copy_s.gif -> 0596009151.gif
- ハードリンクの場合、元ファイルもハードリンクも、まったく同じ容量が表示される
- 元になっているデータに対して複数の名前をつけているだけなので、実体が完全に同一のものだから。
- ハードリンクの場合、元ファイルを削除してしまっても、ハードリンクで付けた名前だけを使ってデータを管理することができる
- ハードリンクを作成した後、以前と異なっているのは2番目の列に示されている値だけ。2列目はリンク数を示していて、ハードリンク作成直後は2つのファイル名が同一のデータを指し示しているため、[2]となっている
- しかし、元ファイルを削除すると、ハードリンクによって作成した新しいファイル名である0596009151_copy.gifのリンク数が[1]となる
参考
入門 Unix for OS X 4.5.5