このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linux基礎:ハードリンクとシンボリックリンク

ハードリンクとシンボリックリンク

 Linuxでは、ファイルやディレクトリを効率的に管理するために「リンク」という仕組みが存在します。リンクを使うと、同じファイルを複数の名前で参照したり、異なる場所からアクセスできるようになります。代表的なリンクには ハードリンクシンボリックリンク があり、それぞれの性質を理解することはシステム運用において重要です。

 本章では、ファイル管理の基盤である iノード を確認しながら、ハードリンクとシンボリックリンクの特徴と違いを解説し、実際に ln コマンドでリンクを作成する方法を学んでいきます。

1.ファイルとiノード

1.1. iノードとは

 Linuxのファイルは iノード(index node) という仕組みで管理されています。iノードには以下のような属性情報が格納されています。

  • ファイルサイズ
  • 所有者とグループ
  • アクセス権限(パーミッション)
  • タイムスタンプ(作成日・更新日など)
  • ディスク上のデータブロック位置

図書館の「図書管理カード」に例えると分かりやすく、iノードがカード、実データが本に相当します。

1.2. iノード番号の確認

ファイルのiノード番号は ls -i コマンドで確認できます。

【例1】iノード番号の確認

[user@rocky9 ~]$ ls -i images/dragon.jpg
36057169 images/dragon.jpg

 ここで表示された数値(36057169)がiノード番号です。ファイル名とiノード番号の対応表を管理しているのがディレクトリです。

2.ハードリンク

2.1. ハードリンクの概要

 ハードリンクとは、同じiノードに複数の名前を関連付ける仕組みです。どの名前でアクセスしても同じファイル内容にたどり着きます。

構文

ln 元ファイル リンク名

2.2. ハードリンクの作成例

【例2】dragon.jpg に対して img1.jpg というハードリンクを作成

[user@rocky9 ~]$ ln images/dragon.jpg img1.jpg

【例3】iノード番号の確認

[user@rocky9 ~]$ ls -i images/dragon.jpg img1.jpg
36057169 images/dragon.jpg  36057169 img1.jpg

両者が同じiノード番号を持っているため、実体は同一ファイルです。

注意点

  • パーティションをまたいで作成できない。
  • ディレクトリに対しては作成できない。

3.シンボリックリンク

3.1. シンボリックリンクの概要

 シンボリックリンクは、元ファイルへのパス情報を格納する仕組みです。Windowsのショートカットと同じ役割を持ちます。

構文

ln -s 元ファイル リンク名

3.2. シンボリックリンクの作成例

【例4】dragon.jpg に対して img2.jpg というシンボリックリンクを作成

[user@rocky9 ~]$ ln -s images/dragon.jpg img2.jpg

【例5】iノード番号の確認

[user@rocky9 ~]$ ls -i images/dragon.jpg img2.jpg
36057169 images/dragon.jpg  35789185 img2.jpg

img2.jpg は元ファイルとは異なるiノード番号を持ち、パスを参照しているだけです。

4.ハードリンクとシンボリックリンクの比較

項目ハードリンクシンボリックリンク
iノード番号元ファイルと同じ別のiノード
パーティションをまたぐ不可可能
ディレクトリへのリンク不可可能
元ファイル削除時の挙動内容にアクセス可能リンク切れになる

5.実践例:todayファイルで確認

【例6】ファイルを作成

[user@rocky9 ~]$ date > today

【例7】リンクを作成

[user@rocky9 ~]$ ln today today.hard
[user@rocky9 ~]$ ln -s today today.sym

【例8】iノード番号を確認

[user@rocky9 ~]$ ls -i today today.hard today.sym
35789282 today  35789282 today.hard  35789314 today.sym

【例9】元ファイル削除後の挙動

[user@rocky9 ~]$ rm today
[user@rocky9 ~]$ cat today.hard
2025年  8月 24日 日曜日 02:01:26 JST
[user@rocky9 ~]$ cat today.sym 
cat: today.sym: そのようなファイルやディレクトリはありません

ハードリンクは引き続きアクセスできますが、シンボリックリンクはリンク切れになりました。

コマンドで操作した内容を図で表すと以下のようになります。

まとめ

  • Linuxのファイルは iノード で管理される。
  • ハードリンク:同じiノードを複数の名前で参照
  • シンボリックリンク:パスを参照する仕組み(ショートカットに相当)
  • ln コマンドで作成し、-s オプションの有無で使い分ける。

👉 ハードリンクは 同じパーティション内での多重参照、シンボリックリンクは 柔軟な参照(別パーティションやディレクトリも可) として使い分けるのが実践的です。