BONSAI 道 - 千里の道も一歩から

決してITに強いわけではないけれどITしてみたいので投稿します。

ハードリンクとシンボリックリンクの違い

はじめに

今回はリンクを張るlnコマンドのハードリンクとシンボリックリンクの違いについて解説します。

ハードリンクとは

  • 1つのファイルの実体に複数の名前を付ける機能(どれも本物の名前)
  • いくつかの制限がある(ディレクトリに対して作成不可、異なるディスク間をまたぐことができないなど)

ハードリンクの例

$ cat test.txt 
a
b
c
$ ln test.txt link   # ハードリンクを張る
$ cat link
a
b
c

以下、ファイルtest.txtの内容を変更した実行結果

$ cat test.txt 
a
b
c
d
$ cat link 
a
b
c
d

ここからさらにtest.txtを削除してやり、linkの内容を表示してみる

$ rm test.txt
$ cat link
a
b
c
d

つまりハードリンクはハードリンクが張られた全てのファイルが削除されるまでファイルの実体も残るというわけです。 次からはシンボリックリンクについて解説します。

シンボリックリンクとは

  • リンク先のパス名が書かれた小さな特殊ファイル
  • リンク先がファイルの実体

シンボリックリンクの例

$ cat test.txt
a
b
c
$ ln -s test.txt link   # シンボリックリンクを張る
$ cat link
a
b
c

以下、ハードリンクと同様にファイルtest.txtの内容を変更した実行結果

$ cat test.txt 
a
b
c
d
$ cat link 
a
b
c
d

しかし、ファイルtest.txtを削除して、linkの内容を表示してみると実行結果が異なる

$ rm test.txt
$ cat link
cat: link: No such file or directory

つまりリンク先がなくなり、リンクが壊れた状態となる。