▪️目的と背景
この記事では「シンボリックリンク」と「ハードリンク」の違いについて解説します。よくLinux上で出てくる用語ですが、この「シンボリックリンク」と「ハードリンク」正直あまり違いがよく分かっていませんでした。
概要だけでなく、一体どういう用途で使われるのかなどいまいちピンと来ていない部分が多かったので、今回Linuxの勉強ついでに色々調べてみました。
この2つを理解するにはまず「iノード」を理解しなければならないので、まず「iノード」について解説して、その後「ハードリンク」「シンボリックリンク」について解説します。
▪️「Iノード」について
Linuxではファイルをディスクに保存すると、「iノード番号」がファイルに割り当てられます。この「iノード番号」には、以下の情報を含んでいます。
・ファイル種類
・サイズ
・アクセス権
・所有者
・保存場所(パス)
など
ざっくりいうと、その「iノード」はそのファイルの詳細情報を持っています。
ファイルを表示するとき、OSはこの「iノード」を参照してファイルの格納場所などの情報を確認してからその中身を表示しています。ファイルが直接中身の情報を持っているわけではありません。
<イメージ>
ファイル名 → iノード → ディスク(保存場所)
「ls -li 」コマンド ・・・ファイルの詳細情報とiノードを確認
1番左の番号が「iノード」の番号です。

▪️ハードリンクとは
ハードリンクでは、「iノード(データの実体)」を別のファイル間で共有します。
<イメージ>
File1 → iノード123
File2 → iノード123
File1もFile2も「Iノード123」を参照しています。同じiノード、言い換えると「データの実体」を共有することになるので片方のデータの内容を書き換えるともう片方の内容も書き変わります。
どちらも「iノード」が同じだからです。
lnコマンド ・・・ ハードリンクを作成
元々存在するsampleファイルと同じiノードを参照するsample2ファイルを作成します。


iノードは「18415527」と同じです。ちなみに「cp」コマンドを使ってファイルのコピーを作ってもそれぞれのファイルが参照する「iノード」は別になります。
注意点として、ハードリンクは「ディレクトリ」には作成できません。(ディレクトリ上でループしてしまうため)
ハードリンクの用途
バックアップなどでよう使われます。片方消しても消えないので最適だからです。
▪️シンボリックリンクについて
「シンボリックリンク」とは、リンク元を参照します。言い換えると「パスの指定」です。
<イメージ>
FileA → iノード123(ファイルの実体)
FileB → FileA
上記のようにFileBは「iノード」ではなく、FileAを参照しています。そのためシンボリックリンクではファイルの「iノード」番号はそれぞれ異なります。
FileBはFileAのパスを参照しているため、FileAが削除されるとFileBは参照先がなくなるため、エラーになります。
ln -s コマンド・・・ シンボリックリンクを作成
ファイルsampleを参照するsample3を作成します。


「sample3 -> sample」となっており、sample3はsampleを参照しています。
ちなみに「シンボリックリンク」はファイルだけでなく、ディレクトリの参照も可能です。
シンボリックリンクの用途
シンボリックリンクは「ショートカット」を実現する仕組みです。ショートカットを作成すると別の場所からその参照先にアクセスすることができます。
▪️まとめ
今回は「ハードリンク」「シンボリックリンク」の用語やその仕組みについて解説しました。初心者には多少複雑な考え方ですが、仕組みを理解するとすんなり頭に入ってくると思います。
意味をしっかり理解して実務で使い分けていきたいですね。

コメント