ハードリンクとシンボリックリンクの違い
スポンサーリンク
ファイルを別の場所にコピーしたい時ってよくあります。 でも、単にコピーするのではなく、リンクを作ってやると、ファイルの複製処理が要らないし、 容量も増えないのでお得です。
LinuxやMacでは、リンクの仕方に二種類あります。リンク方法によってやってることが結構違うので注意! ちなみに、Windowsでは皆さん馴染み深いショートカットを使いますね。(中身の仕様は違うと思いますが)
ハードリンク
ハードリンクは、元ファイルに別名を付けます。
コマンドは以下。
ln 元ファイル名 リンク先ファイル名
例:ln ~/foo.txt ~/tmp/foo_hard.txt
例では、既存のfoo.txtに新しいfoo_hard.txtという名前をつけてリンクを作っています。 普通のコピーと違い、foo.txtを編集したらfoo_hard.txtも更新されます。 これは、2つのファイルの指す実体が同じだからです。
シンボリックリンク
コマンドは以下。
ln -s 元ファイル名 リンク先ファイル名
例:ln -s ~/foo.txt ~/tmp/foo_simbolic.txt
シンボリックリンクを作った後、ls -l
でリンクがどうなってるか見てみます。
$ls -l lrwxr-xr-x 1 user staff 21 11 9 20:37 foo_simbolic.txt -> /Users/user/foo.txt
リンク元のファイルが"->"で示されているのがわかります。ハードリンクの時は、こうゆう表示にはなりません。
シンボリックリンクも同じように、お互いに編集結果が反映されます。 しかし、ハードリンクと大きな違いは、
- メリット:ディレクトリに対してリンクを作ることができますが、
- デメリット:リンク元を消すと、No such file or directoryと言われます!
ハードリンクはリンク元もリンク先も同じ扱いだったのが、シンボリックリンクですと主従関係が生まれてますね。 シンボリックリンクのほうがLinuxだとよく使われているそうです。