ハードリンクとシンボリックリンクの違いと使い分け|ln・inode・ls -li【LinuC 1.02.3】

LinuC対策

この記事はLinuC Level1 主題1.02.3「ハードリンクとシンボリックリンク」に対応した要点解説です。試験で問われる範囲に絞り、lnln -sの使い分け、inode共有のルール、ファイルシステム跨ぎやディレクトリへの可否、リンク判別方法までを整理しました。

📚 LinuC Level1 完全攻略マップ(全39サブ項目)へ戻る


目次

  1. この記事でできるようになること
  2. inodeとファイル名の関係
  3. lnln -sの使い方
  4. ハードリンクの性質
  5. シンボリックリンクの性質
  6. ハードとシンボリックの比較
  7. リンクの判別方法
  8. シンボリックリンクによるバージョン運用
  9. よくある質問(FAQ)
  10. まとめ
  11. 模擬問題にチャレンジ(ランダム出題)

1. この記事でできるようになること

  • ln 元 リンク名でハードリンク、ln -s 元 リンク名でシンボリックリンク
  • ✅ ハードリンクは同一ファイルシステム内ファイルのみ(ディレクトリ不可)
  • ✅ シンボリックリンクはファイルシステム跨ぎ可ディレクトリ可
  • ✅ ハードリンクは元ファイルと同じinodeを共有(内容・パーミッション・所有者・mtimeも共通)
  • ✅ シンボリックリンクは別inodeでパス文字列を格納、元が消えると壊れる(broken link)
  • ✅ 判別はls -l(先頭l)/ls -li(inode)/ls -F(末尾@)/file
  • ✅ バージョン切り替えはシンボリックリンクの張り替えで実現(libfoo.so.1 → libfoo.so.1.2.3方式)

2. inodeとファイル名の関係

Linuxのファイルシステムはファイル名ファイル実体を分離して管理します。実体はinodeという番号で識別され、ファイル名はディレクトリ内で「名前→inode番号」の対応として保存されます。

構成要素 内容
ファイル名 ディレクトリ内の「名前→inode番号」のエントリ
inode ファイル実体の番号。所有者・グループ・パーミッション・サイズ・タイムスタンプ・データブロック位置などを保持
データブロック ファイル内容が格納されているディスク領域

inodeはファイルシステム単位で管理されます。別ファイルシステムでは同じ番号が別ファイルを指すため、ハードリンクはFSをまたいで張れません。

# ls -i でinode番号を表示
$ ls -i hello.txt
4194310 hello.txt

# ls -li は通常の詳細情報にinodeを付けた形
$ ls -li hello.txt
4194310 -rw-r--r-- 1 kei kei 12 Apr 22 10:15 hello.txt
 ↑ inode番号

3. lnln -sの使い方

リンクを作るコマンドはln一本。オプションなしでハードリンク、-sを付けるとシンボリックリンクになります。書式はcpと同じく元 → リンク名の順です。

書式 動作
ln 元 リンク名 ハードリンクを作成
ln -s 元 リンク名 シンボリックリンクを作成
# File1 のハードリンクを File2 として作成
$ ln File1 File2

# File1 のシンボリックリンクを File2 として作成
$ ln -s File1 File2
⚠️ 試験で紛らわしい選択肢
ln --hardln -dcp -ssymlinklinkコマンドなどを正解として提示してくる選択肢が出ますが、LinuC範囲での正解は常にlnln -sの2通りと考えて大丈夫です。

ハードリンクは同じinodeを指す別名です。2つのファイル名が同格で、どちらかを削除しても他方からinodeの実体を読めます。

特徴 内容
inode番号 元ファイルと同じ
共有される情報 inodeに格納される全て(内容・パーミッション・所有者・グループ・mtime)
リンクカウント ls -lの2列目が作成のたびに+1される
別ファイルシステムへ作成 不可(inodeはFS単位のため)
ディレクトリへの作成 通常不可(循環参照防止のため。...はOSが特例で作る)
元を削除したとき リンクカウントが減るだけで、実体はリンク側に生存する
# 元ファイル
$ echo "hello" > File1

# ハードリンクを作成(-s なし)
$ ln File1 File2

# inode が同じ、リンク数が 2
$ ls -li File1 File2
4194310 -rw-r--r-- 2 kei kei 6 Apr 22 10:15 File1
4194310 -rw-r--r-- 2 kei kei 6 Apr 22 10:15 File2
 ↑同じinode  ↑リンク数が2

# 元を削除しても File2 は生きている
$ rm -f File1
$ cat File2
hello
💡 共有される情報を整理
ハードリンクで共有されるのはinodeに格納される全情報です。所有者・グループ・パーミッション・タイムスタンプ・内容のいずれも2つの名前で同一。ディレクトリエントリで異なるのは「名前」と「置かれているディレクトリ」だけ、という理解が試験で効きます。

シンボリックリンク(symlink/ソフトリンク)は参照先のパス文字列を格納した独立したファイルです。Windowsのショートカットに相当します。

特徴 内容
inode番号 元ファイルとは(独自のinodeを持つ)
中身 参照先のパス文字列だけ
ファイルタイプ ls -lの先頭がl(例: lrwxrwxrwx
リンクカウント 作成しても元ファイルのリンク数は変化しない
別ファイルシステムへ作成 (パス文字列だけなので制約なし)
ディレクトリへの作成
元を削除したとき 壊れたリンク(broken link/dangling symlink)になる
# シンボリックリンクを作成(-s を付ける)
$ ln -s /home/test/file.txt /export/file.txt

# inode は元と別、先頭 l、末尾に -> 参照先
$ ls -li /export/file.txt /home/test/file.txt
4194311 lrwxrwxrwx 1 kei kei 22 Apr 22 10:15 /export/file.txt -> /home/test/file.txt
2097152 -rw-r--r-- 1 kei kei  6 Apr 22 10:14 /home/test/file.txt
 ↑異なるinode

# 元を削除するとリンクが壊れる
$ rm /home/test/file.txt
$ cat /export/file.txt
cat: /export/file.txt: No such file or directory

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

試験では両者の特徴を対比する形で問われます。以下の表は丸ごと覚えておくと選択肢で迷いません。

観点 ハードリンク シンボリックリンク
作成コマンド ln 元 名前 ln -s 元 名前
inode 元と同じ 元と異なる
ファイルタイプ(ls -l) -(通常ファイル) l
中身 実体データを共有 参照先のパス文字列
別ファイルシステム 作成不可 作成
ディレクトリへ 作成不可(通常) 作成
元を削除すると リンクは生存(inodeはリンク数が0になるまで残る) 壊れる(broken link)
元ファイルのリンク数 +1される 変化しない
⚠️ 別ファイルシステム跨ぎが鍵
/home/exportが別のファイルシステム」といった設定でリンクを作らせる問題が頻出です。ハードリンクは不可、シンボリックリンクは可と即答できるようにしておきます。

7. リンクの判別方法

「あるファイルがハードリンクなのかシンボリックリンクなのか、それとも通常ファイルか」を調べるコマンドは複数あります。試験ではこの組み合わせが問われます。

コマンド 見るべきポイント
ls -l 先頭1文字:-=通常(ハードリンクも-)/l=シンボリック。2列目のリンク数が2以上ならハードリンク関係
ls -i inode番号のみ表示。同じinodeのファイルを探すときに使う
ls -li inode番号付きの詳細表示(上の2つを合わせた形)
ls -F 末尾に種別記号:*=実行可能//=ディレクトリ/@=シンボリックリンク
file リンク名 「symbolic link to …」のように種別を文字で出力
$ ls -liF
4194310 -rw-r--r-- 2 kei kei    6 Apr 22 10:15 File1
4194310 -rw-r--r-- 2 kei kei    6 Apr 22 10:15 File2
4194311 lrwxrwxrwx 1 kei kei   15 Apr 22 10:15 current-log@ -> /var/log/syslog

$ file File2
File2: ASCII text

$ file current-log
current-log: symbolic link to /var/log/syslog

この例ではFile1File2がinode 4194310・リンク数2なのでハードリンク関係current-logは先頭l・末尾@file出力でシンボリックリンクだと判別できます。

💡 「inode番号だけ」を表示したいとき
ls -ii)がinode番号表示のオプション。-l-a-F-Rはいずれも別の役割で、inode番号は出しません。

8. シンボリックリンクによるバージョン運用

シンボリックリンクは「現行バージョンを指す固定名」として使うと強力です。新旧バージョンのファイルを両方残したまま、リンクを張り替えるだけで切り替え・切り戻しができます。Linuxのライブラリ(例: libfoo.so.1 → libfoo.so.1.2.3)や各種ツールで広く採用される定番パターンです。

# 実体はバージョン名付きで保存しておく
/usr/local/bin/myapp-1.0
/usr/local/bin/myapp-2.0

# 「myapp」という名前はシンボリックリンクにして、新バージョンを指す
$ ln -s /usr/local/bin/myapp-2.0 /usr/local/bin/myapp

# 問題が起きたら現行リンクを張り替えるだけで切り戻せる
$ ln -s /usr/local/bin/myapp-1.0 /usr/local/bin/myapp

「現バージョンを削除して新バージョンを同じ名前にリネームする」「cpで毎回コピーする」といった方法では、切り戻しのたびにファイル本体を移動する必要があり、ロールバックが難しくなります。シンボリックリンクなら旧バージョンをそのまま残しつつ名前だけを切り替えられるのが利点です。


9. よくある質問(FAQ)

ハードリンクとシンボリックリンクの違いを一言で?

ハードリンクは同じinodeを指す別名(実体が1つ、名前が複数)、シンボリックリンクは参照先のパス文字列を格納した別ファイル(実体が別で独自inode)です。ここから、FS跨ぎ可否・ディレクトリ可否・元削除時の挙動の違いがすべて導けます。

別ファイルシステムにリンクしたい

シンボリックリンクを使います。ハードリンクはinodeを共有する仕組み上、inode番号の意味がFS内でしか通用しないためFS跨ぎ不可。シンボリックリンクはパス文字列を持つだけなので制約がありません。

シンボリックリンクで作ります。ハードリンクでのディレクトリ作成は循環参照による無限ループの危険があり通常禁止されています(...はOSが例外で作る特殊エントリ)。

元ファイルを消したらリンクはどうなる?

ハードリンクはリンク側が生存します(inodeはリンクカウントが0になるまで残る)。シンボリックリンクは壊れたリンクになり、参照しようとしても「No such file or directory」で失敗します。

ln --hardln -dは使える?

いずれも一般には使いません。ハードリンクはlnのデフォルト動作なのでオプション不要で、-dオプションは一部実装にありますが権限的に一般ユーザは実行できません。LinuCの文脈ではハード=ln、シンボリック=ln -sの2通りだけ覚えておけば足ります。


10. まとめ

  • ハードリンクln 元 名前。元と同じinodeを指す同格の別名。リンクカウントが+1される
  • シンボリックリンクln -s 元 名前。参照先パスを格納した別ファイル。先頭l
  • ファイルシステム跨ぎ:ハードは不可/シンボリックは可
  • ディレクトリへのリンク:ハードは通常不可/シンボリックは可
  • ハードリンクで共有される情報:inodeに格納される全て(内容・パーミッション・所有者・グループ・mtime)
  • 元を削除したとき:ハード=リンク側で生存/シンボリック=壊れる
  • 判別コマンドls -l(先頭l/リンク数)、ls -i(inode番号)、ls -F(末尾@)、file(「symbolic link to」)
  • バージョン運用:実体はバージョン名付き保存、固定名をシンボリックリンクで張り替える

📚 LinuC Level1 完全攻略マップへ戻って次の主題に進みましょう。


11. 模擬問題にチャレンジ(ランダム出題)

ここまでの内容を本試験に近い形で確認できます。問題数を選んで「出題スタート」を押すと、主題1.02.3の問題プールからランダムに出題されます。選択肢をクリック/タップすると、正誤と解説がその場で表示されます。

合格ライン目安:75%以上。もっと幅広く解きたい場合はLinuC 模擬問題ポータルから他の分野にも挑戦できます。


おすすめの教材


Linux教科書 LPICレベル1

Linux教科書 LPICレベル1 Version 5.0対応(あずき本)

LinuC/LPIC Level1 の定番参考書。出題範囲全体を網羅。


Amazonで見る →

【ウズカレ式】1週間でLinuxの基本操作と管理・運用スキルが学べる講座

累計80,000人以上受講。LinuC Level1(101+102)を1週間で網羅。


Udemyで講座を見る →


関連記事

📚 LinuC Level1 完全攻略マップへ戻る
全39サブ項目のシラバス準拠マップから他の記事を探せます

Dockerの基礎を動画で体系的に学びませんか?

実務で使う基礎だけを3時間に凝縮。環境構築から丁寧に解説しています。

Udemy Docker入門講座 クーポン割引で講座を見る →

コメント

タイトルとURLをコピーしました