【Linux入門】ハードリンクとシンボリックリンクの違い
定義
- ハードリンク:ファイルシステム上の同じiノードを複数のファイル名で参照する方法。
- シンボリックリンク:実際のデータを含まずに別の場所を参照する、ポインタのようなファイル。
ファイルの関連性
- ハードリンク:同じiノードを共有するファイル。オリジナルのファイルとハードリンクはデータを共有している。
- シンボリックリンク:実際のデータを含まず、別のファイルやディレクトリへのパスを保持する。シンボリックリンクとリンク先は別々のエンティティ。
扱いやすさ
- ハードリンク:ファイルの内容が変更されると、ハードリンク先の内容も同じになる。リンクの存在を気にせずに利用できる。
- シンボリックリンク:リンク先のファイルが移動または削除されると、リンクは無効になる。リンクが参照する場所の維持が必要。
ファイルシステム内/外での利用
- ハードリンク:同じファイルシステム内でのみ作成可能。
- シンボリックリンク:同じファイルシステム内外を問わず、作成可能。
ハードリンクとシンボリックリンクの違いの例
ハードリンクとシンボリックリンクの違いを確認していきます。
・「note」ファイルを作成します。
$ echo "This is note." > note
・ハードリンクファイル「note.hard」を作成します。
$ ln note note.hard
・シンボリックリンクファイル「note.sym」を作成します。
$ ln -s note note.sym
・iノードを確認します。
$ ls -i note note.hard note.sym
35718196 note 35718196 note.hard 35718202 note.sym
ハードリンクファイルは元の「note」と同じ iノード番号を持っています。※この iノード番号は、実行環境により変わります。
シンボリックリンクは元の「note」の iノード番号と異なります。
この状況を図にまとめます。
元のファイルである「note」ファイル、ハードリンクファイル、シンボリックリンクファイルの内容を表示します。
$ cat note
This is note.
$ cat note.hard
This is note.
$ cat note.sym
This is note.
・元のファイルである「note」を削除します。
元のファイルである「note」ファイル、ハードリンクファイル、シンボリックリンクファイルの内容を表示します。
$ rm note
$ cat note
cat: note: そのようなファイルやディレクトリはありません
$ cat note.hard
This is note.
$ cat note.sym
cat: note.sym: そのようなファイルやディレクトリはありません
「note」ファイルは削除したため、もちろん、ありません。ハードリンクファイルは、同じように表示されます。それは、「note」と同じ iノード番号で同じ場所を指示しているからです。
シンボリックリンクファイルでは「そのようなファイルやディレクトリはありません」と表示されます。シンボリックリンクは、あくまで、ファイルへの参照先(ポインタ)を格納しているにすぎなく、参照先のファイルがなくなれば、当然ながら、アクセスすることができません。
ファイルの内容である「This is note.」は、まだ、ディスク上に残っています。それでは、ハードリンクファイルる「note.hard」を削除した場合は、どうなるでしょうか?
Linuxにおいて、
ファイルを削除するということは、ファイル名と iノードへのリンクを切断する。
と、いうことを意味します。
リンクが切断されるだけでファイルの内容は、まだ、残っています。新しいファイルで上書きされるまで残ることになります。