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

  • URLをコピーしました!

Linuxではファイルの参照方法として「ハードリンク」と「シンボリックリンク」が存在します。
これらはファイルシステムの管理に密接に関わる概念で、用途や動作が異なります。
この記事では、これらの違い、使い分け、参照先やinodeの関係について掘り下げて解説します。

目次

ハードリンクとは

ハードリンクは、同じファイルデータに対して複数の名前(リンク)を付与するものです。
ハードリンクを作成する際、元のファイルとリンク先は同じinode番号を持つため、
どちらも同じ実体を指し示しています。

つまり、ハードリンクは一つのファイルに対して複数の参照名を提供し、
ファイルそのものを完全にコピーするわけではありません。

ハードリンクの特徴

  • 同じファイルに複数の名前がつく:元のファイルとハードリンクは同一のデータを参照します。
  • 同じinode番号を持つ:ファイルシステム上、同じinodeを指すため、ファイルのデータが変更されるとリンク元とリンク先の両方に影響します。
  • リンク元が削除されてもファイルは削除されない:一つのリンクを削除しても、他のリンクが残っている限り、ファイルデータは保持されます。
  • 異なるファイルシステムでは作成できない:ハードリンクは同じファイルシステム内でしか機能しません。

ハードリンクの例

ln file1 link1

上記のコマンドでfile1のハードリンクをlink1という名前で作成します。
どちらも同じファイルデータを指します。

シンボリックリンク(ソフトリンク)とは

シンボリックリンクは、元のファイルの「パス」を参照する特殊なファイルです。
シンボリックリンク自体は元のファイルとは別のinode番号を持ち、
実体ではなく元のファイルの場所(パス)を指します。
そのため、元のファイルが削除されるとシンボリックリンクは無効になります。

シンボリックリンクの特徴

  • 元ファイルへのパスを参照:リンクは元のファイルの場所を指します。
  • 異なるファイルシステムでも使用可能:異なるディスクやパーティション上でもリンクを作成できます。
  • 独自のinodeを持つ:シンボリックリンクは元ファイルとは別のinodeを持ち、ファイルのデータではなくパス情報を持ちます。
  • 元ファイルが削除されるとリンクが切れる:元のファイルが削除されると、リンクが機能しなくなり「壊れたリンク」になります。

シンボリックリンクの例

ln -s /path/to/file link_name

このコマンドで、/path/to/fileのシンボリックリンクをlink_nameとして作成します。

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

項目ハードリンクシンボリックリンク
参照対象ファイル本体ファイルのパス
inode同じinodeを共有する別のinodeを持つ
ディスク上の制約同一ファイルシステム内でのみ作成可能異なるファイルシステムでも作成可能
元ファイル削除の影響他のリンクが残っていれば問題なしリンク切れとなる(無効化)

使い分け

  • ハードリンクを使うべき場合: 同一ファイルシステム内で、同じファイルを複数の場所から参照したい場合に使用します。特に、元ファイルを削除しても他の場所からアクセスできるようにしたいときに便利です。
  • シンボリックリンクを使うべき場合: 異なるファイルシステム間やパスの指定が重要な場合に使います。また、ディレクトリのリンクはシンボリックリンクのみ可能です。

inodeとは?

inodeは、Linuxのファイルシステムがファイルの
メタデータ(サイズ、アクセス権、作成日時など)を管理する構造体です。

ファイルやディレクトリの実体データに関する情報はすべてinodeに記録されています。
ハードリンクは同じinodeを共有しますが、シンボリックリンクは元のファイルとは異なる
inodeを持ち、パス情報のみを保存します。

まとめ

  • ハードリンクは同じファイルを複数の名前で参照し、元のファイルが削除されてもデータは残ります。
  • シンボリックリンクは元のファイルのパスを指し示すため、異なるファイルシステム間でも使用可能ですが、元ファイルが削除されるとリンクが切れます。
    目次