Linuxを勉強していたら出てきた、「ハードリンク」とか「シンボリックリンク」
初見では意味がわからなかったので、自分なりに解釈してまとめてみます。
参考にした書籍
本当にお世話になった導入書です。基礎の基礎を学ばせていただきました。
ファイルとiノード
ファイルは、iノード(index node)で管理されています。iノードには、ファイルサイズや最終更新日時、アクセス権情報や、ディスク上のどの場所にファイルの内容が書き込まれているか、といった情報が記録されています。
全てのファイルやディレクトリには、それらを管理するiノードが存在します。iノードを見れば、ファイルの属性がわかり、ファイルの内容にアクセスできるというわけです。lsコマンドに**-i**オプションをつけて実行すると、iノード番号を確認できます。
この仕組みを図書館で例えるなら、図書管理カードです。図書管理カードには書名、著者名、ページ数や、その本が図書館のどの棚に保管されているか、といった情報が書き込まれています。
利用者は図書管理カードを見て、目当ての本が図書館にあるのかどうか、またどこの棚に保管されているのかを調べることができるという仕組みと同じです。
ハードリンクとは
iノード番号とファイル名の対応付けをリンクと言います。ハードリンクとは、1つのiノードに複数のファイル名をリンクさせることです。ハードリンクを作成するにはlnコマンドを使います。
パーティション
1つの物理的なディスクを論理的に複数に分けた領域のことをパーティションという。
iノードはパーティションごとに管理されているため、ハードリンクは異なるパーティション間で作成することができません。パーティションが異なると、同じiノード番号であっても、ファイルの実体は別々となります。
シンボリックリンク
シンボリックリンクはファイルに別名をつける仕組みのことです。言い換えると、ファイルやフォルダに対する注文を代わりに受け付けて本来のファイル中継する役目をしているものです。lnコマンドに**-s**オプションをつけて実行するとシンボリックリンクを作成できます。
元のファイルを削除するとどうなるのか
リンクの元となっているファイルを削除するとどうなるのでしょうか。
答えは、ハードリンクの場合だと同じようにアクセスできますが、シンボリックリンクの場合だとアクセスするとエラーになってしまいます。
シンボリックリンクはあくまでファイルへのポインタ(ファイルの参照先)を格納しているに過ぎないので、参照先がなくなってしまうわけですから、「そんなファイルは存在しないよ」と怒られてしまうわけです。