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

LPICレベル1の範囲でもあるlnコマンドですが、
このlnコマンドを使うとオプションの有無によって違う種類のリンクを作ることが出来ます。
通常、Linuxを扱っていて単にリンクというとシンボリックリンクを指すことが多いとおもますがリンクの種類にはもう一つあるのでそれぞれの特徴について備忘録的にまとめておきます。

・シンボリックリンク

・パーティションをまたがってリンクを貼ることが出来る
・シンボリックリンクを削除してもリンク先は削除されない
・Windowsでいうところの「ショートカットファイル」に近いイメージ
・ディレクトリを基にしてリンクを作成することができる

ハードリンク

・パーティションをまたがってリンクを貼ることは出来ない
・ハードリンクを削除するとリンク先も削除される
・ディレクトリを基にしてリンクを作成することができない

 

ふたつのリンクの違いについて考える場合に重要になってくるキーワードに「iノード」というものがありますが、
iノードというのはファイルシステム内でユニークな番号のことです。
シンボリックの場合はリンク元ファイルとリンク先のファイルiノードは違いますが、ハードリンクの場合はリンク元とリンク先のiノードは同じになります。
同じiノードを持つということはハードリンクを削除すると実体も削除されるということになります。
逆にシンボリックリンクの場合はリンク元を削除してもその実体までは削除されません。

ふたつのリンクの使い分けについて

シンボリックリンクとハードリンクの違いを単純に並べてみると、
シンボリックリンクの方はかなり便利そうに見えて逆にハードリンクの方はあまり使いどころがなさそうな印象も受けますが実際は両方のリンクの使い分けが大切なようです。
あとは技術者のセンス。
プログラムでファイルを操作するような場合、シンボリックリンクだとリンク先が存在するか存在しないかはアクセスしてみなければわかりませんが、ハードリンクの場合はリンクがもしなくなっていればファイルが無いことは明白なのでデバックがし易い、という意見もあるようです。(私はまだ経験がありませんが。)
意見が別れる場合もあるそうなので、
そういう時はもうどういう思想で実装しているかとか、そういう話にもなってきますよね。

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA