新Linux入門|ハードリンクとシンボリックリンクの違いを理解しよう

Linuxには、ファイルを「別の名前」や「別の場所」から参照できる便利な仕組みがあります。
それが ハードリンクシンボリックリンク です。

一見似ていますが、内部の仕組みや動作には大きな違いがあります。
この記事では、AlmaLinux 9.6 を使って、両者の違いをわかりやすく解説します。

🔗 リンクの基本概念

 Linuxのファイルは、実際のデータ(内容)と、そのデータを指す「名前(ファイル名)」が別々に管理されています。
この「データ部分」は iノード(inode) という情報構造によって管理され、
複数のファイル名が同じiノードを参照することもできます。

リンクとは、このiノードへの参照を増やしたり、別のパスとして指し示したりする仕組みのことです。

⚙️ 定義と仕組みの違い

種類定義iノード参照対象特徴
ハードリンクファイルシステム上で同じiノードを複数の名前で参照する方法同じファイルの実体(iノード)実体共有。どちらも本体。削除しても他が残ればデータも残る。
シンボリックリンク別のファイルやディレクトリを指す「パス情報」を持つファイルファイル名(パス)ポインタのように参照。リンク先が削除されると無効になる。

💡 まとめポイント

  • ハードリンクは「同じ実体を共有」する兄弟のような関係。
  • シンボリックリンクは「案内板」のような存在で、実体ではなく「住所」を持つだけ。

🧱 ファイルシステムでの関係図(概念)

ファイル名参照先iノードデータ実体備考
noteiノード 3571819635718196"This is note."元のファイル
note.hardiノード 3571819635718196"This is note."ハードリンク(同じ実体)
note.symnote へのパス35718202パス情報のみシンボリックリンク(参照先)

💬 ハードリンクは同じiノード番号を持ちますが、シンボリックリンクは別のiノード番号を持ち、
実体ファイルのパス情報を格納しています。

🧰 ハードリンクとシンボリックリンクの作成方法

Linuxでリンクを作るには、どちらも ln コマンドを使用します。

コマンドの書式

種類書式説明
ハードリンクln [元ファイル] [リンク名]同じiノードを参照するリンクを作成
シンボリックリンクln -s [元ファイル] [リンク名]元ファイルへのパスを持つリンクを作成

主なオプション

オプション説明
-sシンボリックリンクを作成する
-v作成結果を詳細に表示する
-f既存ファイルを上書きしてリンクを作成
--helpヘルプを表示

🧪 実際に試してみよう!

以下の例は、AlmaLinux 9.6 の一般ユーザー suzuki で実行したものです。

① 元のファイルを作成

[suzuki@AlmaLinux ~]$ echo "This is note." > note

② ハードリンクとシンボリックリンクを作成

[suzuki@AlmaLinux ~]$ ln note note.hard
[suzuki@AlmaLinux ~]$ ln -s note note.sym

③ iノードを確認

[suzuki@AlmaLinux ~]$ ls -i note note.hard note.sym
35718196 note  35718196 note.hard  35718202 note.sym

📘 解説

  • note と note.hard は 同じiノード番号(35718196) を共有しています。
  • note.sym は別のiノード(35718202)を持ち、パス情報(note への参照)を保持しています。

この状況を図にまとめます。

🔍 動作確認

① 各ファイルの内容を確認

[suzuki@AlmaLinux ~]$ cat note
This is note.

[suzuki@AlmaLinux ~]$ cat note.hard
This is note.

[suzuki@AlmaLinux ~]$ cat note.sym
This is note.

すべて同じ内容が表示されます。
ハードリンクもシンボリックリンクも、実際のファイルを参照しているためです。

② 元ファイルを削除

[suzuki@AlmaLinux ~]$ rm note

③ もう一度確認

[suzuki@AlmaLinux ~]$ cat note
cat: note: そのようなファイルやディレクトリはありません

[suzuki@AlmaLinux ~]$ cat note.hard
This is note.

[suzuki@AlmaLinux ~]$ cat note.sym
cat: note.sym: そのようなファイルやディレクトリはありません

📘 解説

  • ハードリンク(note.hard)は、同じiノードを共有しているためデータが残っています。
  • シンボリックリンク(note.sym)は、参照先が消えたため「壊れたリンク(broken link)」になっています。

 シンボリックリンクは、あくまで、ファイルへの参照先(ポインタ)を格納しているにすぎなく、参照先のファイルがなくなれば、当然ながら、アクセスすることができません。

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

比較項目ハードリンクシンボリックリンク
iノード番号同じ異なる
ファイルの実体共有パスを保持
元ファイル削除時データ残るリンク切れになる
ディレクトリリンク通常不可可能
異なるファイルシステム不可可能
作成コマンド例ln file1 file1.hardln -s file1 file1.sym

💡 覚え方

  • ハードリンク=実体を共有する「兄弟」
  • シンボリックリンク=案内板(ショートカット)

🧾 Linuxでの「削除」の本当の意味

Linuxでは、「ファイルを削除する」とは ファイル名とiノードとのリンクを切る ことを意味します。
データそのものはすぐには消えず、リンク(参照)が完全になくなるまでディスク上に残ります。

つまり

  • ハードリンクが残っていれば、データは存続。
  • 全てのリンクが切れた時点で初めてディスク領域が解放されます。

この仕組みのおかげで、Linuxはファイル操作を非常に効率的かつ安全に行うことができます。

✅ まとめ:違いを理解して使い分けよう!

ハードリンクとシンボリックリンクは、どちらも便利な「ファイル参照の仕組み」ですが、
使う場面に応じて選ぶことが大切です。

💡 ポイントまとめ

  • ハードリンクは「同じ実体を共有」し、削除しても他のリンクが残ればデータは消えない。
  • シンボリックリンクは「パスを参照」するため、柔軟で便利だが、元ファイルが消えるとリンク切れになる。
  • 作成にはどちらも ln コマンドを使用する(シンボリックリンクは -s が必要)。

システム管理やスクリプト作成の際に、
「どちらのリンクを使えばよいか」を理解しておくことはとても重要です。