シンボリックリンクとハードリンクの違いや使い分けについてご存知でしょうか?
自分はよく知らなかったので、関連する記事をいろいろ探してみました。
図として直感的にわかりやすかったのはこちらの記事。
それぞれの特徴についてもわかりやすく書かれています。
https://eng-entrance.com/linux-permission-link
シンボリックリンク
シンボリックリンクはショートカットというイメージがわかりやすいのではないでしょうか?
original_fname
というファイルを参照するシンボリックリンクsymkink_fname
を作成することを考えてみましょう。
./original_fname
./symlink_fname
ここで
cat ./symlink_fname
を実行すると
cat ./original_fname
と同等の操作を意味するはずです。
つまり、
rm ./symlink_fname
は
rm ./original_fname
と同等になってしまい、元のファイルoriginal_fname
を削除することになってしまいます。
これに関して、シンボリックリンク削除時の注意点が例えばこの記事に書かれています。
https://mimirswell.ggnet.co.jp/blog-165
要はrm
コマンドでもリンクを削除できるけど、危ないからunlink
を使おうね、という話です。
ハードリンク
これに対し、ハードリンクはどうでしょうか。
./original_fname
./hardlink_fname
それぞれのパスは同じ実体ファイルを指し示すことになります。
この状態で
open ./hardkink_fname
を実行すると、
open <実体ファイル>
の意味になります。
面白いのは、実体ファイルへの参照カウンタのようなものがあり、
rm ./hardkink_fname
を実行すると、./hardkink_fname
というパスは削除されてしまいますが、実体ファイルは削除されません。
なぜなら、今考えている状況だと元々
./original_fname
./hardlink_fname
の2つの「参照」が存在していたため、「参照」を1つ削除してもまだ1つ残っているからです。
そして、「参照」の数が0になると、実体も削除されるらしいです。
inodeと実体ファイル
今までイメージを掴むために「実体」や「参照」という言葉を使ってきましたが、きちんと説明するにはinodeに触れる必要があります。
わかりやすいのはこちらの記事でしょうか。
https://qiita.com/katsuo5/items/fc57eaa9330d318ee342
ハードリンクの使い道
一般的に使われるのはシンボリックリンクの方らしいですね。
では逆に、ハードリンクはいつ使われるのでしょうか?
こちらの質問に対する回答を読むと、なるほど!と思えます。
https://q.hatena.ne.jp/1265361495
IMAPサーバで、送信先が複数人のメールを参照するのに使われているとのこと。
コピーせずに済む&適切に削除が行われる、ということですね。
...勉強になりました!