このページで解説している内容は、以下の 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.jpgimg2.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オプションの有無で使い分ける。
👉 ハードリンクは 同じパーティション内での多重参照、シンボリックリンクは 柔軟な参照(別パーティションやディレクトリも可) として使い分けるのが実践的です。
