【LPIC基礎学習】シンボリックリンクとハードリンクについて

リボン LPIC1 学習記録

はじめに(このページの目的)

この記事は、LPICレベル1学習中の筆者が、AIによる解説と実際の操作経験をもとにまとめたものです。
Linuxのシンボリックリンクハードリンクについて、手を動かしながら理解を深めます。
最後に、学習での気づきや感想も添えます。

作業前の確認ポイント

– Linux環境(Ubuntu、Rocky Linuxなど)で端末操作ができること
echolsrmなど基本コマンドを使えること
– 練習用のファイルやスクリプトを自由に作成できる作業ディレクトリを用意しておくこと

実施手順

ステップ1:リンクとは

リンクとは、既存ファイルを別名や別の場所から参照できる仕組みです。
Linuxでは大きく次の2種類があります。

  • ハードリンク:inode(実体)を共有するリンク
  • シンボリックリンク:パス情報を参照するリンク

ステップ2:基本的な使い方

# 元ファイル作成
echo "Hello" > file.txt

# ハードリンク作成
ln file.txt hardlink.txt

# シンボリックリンク作成
ln -s file.txt symlink.txt

# inode番号確認
ls -li file.txt hardlink.txt symlink.txt

lnはデフォルトでハードリンクを作成し、-sオプションでシンボリックリンクを作成します。
ls -liでinode番号を確認できます。

ステップ3:inodeとは

inode(アイノード)は、ファイルのデータや属性を管理する領域です。
格納される情報には次のようなものがあります。

  • ファイルサイズ
  • 所有者(UID)・グループ(GID)
  • 作成・更新・アクセス時刻
  • パーミッション
  • データの格納先
  • リンク数

ファイル名はinodeへのラベルに過ぎず、実体はinodeにあります。

ステップ4:inodeとリンクの関係

ハードリンクは複数の名前が同じinodeを共有し、リンク数が増えます。
全てのリンクが削除されるとinodeも消えます。
シンボリックリンクは別のinodeを持ち、参照先のパス情報だけを保持します。
参照先がなくなるとリンク切れになります。

ステップ5:注意点・落とし穴

  • ハードリンクは同じファイルシステム内でのみ作成可能
  • 通常ユーザーはディレクトリへのハードリンクを作成できない
  • シンボリックリンクの参照先が削除されるとアクセス不可
  • シンボリックリンクのパーミッションは実質的な意味を持たない

実践してみよう(練習問題)

問題1:リンク作成とinode確認

# 準備
echo "TestSample" > sample.txt

# ハードリンクとシンボリックリンク作成
ln sample.txt hard.txt
ln -s sample.txt sym.txt

# inode確認
ls -li sample.txt hard.txt sym.txt

期待:sample.txthard.txtは同じinode番号、sym.txtは別番号。

問題2:リンク先削除時の挙動

# 元ファイル削除
rm sample.txt

# 残ったリンク確認
cat hard.txt
cat sym.txt

期待:hard.txtは中身が見えるが、sym.txtはエラーになる。

接続確認とトラブルシューティング

エラー 原因 対処法
No such file or directory シンボリックリンク先が存在しない リンク先を作成するかリンクを再作成
Permission denied リンク先の権限不足 元ファイルのパーミッションを変更

補足情報まとめ

用語解説

用語 意味
inode ファイル属性・位置情報を保持する管理領域
リンク数 同じinodeを参照するファイル名の数
ハードリンク inodeを共有する別名
シンボリックリンク パス情報を持つ参照ファイル

コマンド一覧

コマンド 説明
ln file link ハードリンク作成
ln -s file link シンボリックリンク作成
ls -li inode番号とリンク数を表示
rm file ファイル削除(リンク数ゼロでinodeも削除)

まとめ

  • ハードリンクはinodeを共有し、元ファイルがなくなっても内容が残る
  • シンボリックリンクはパス参照型で、リンク切れの可能性がある
  • ls -liでinode番号を比較すると違いがわかる

参考リンク

学習してみた感想(筆者コメント)

inodeとリンクの関係を理解することで、Linuxファイルシステムの仕組みが一段と明確になりました。
特に、ハードリンクとシンボリックリンクの違いを実験で確認すると、知識として定着しやすいと感じました。
今後はファイルシステムの制限や特殊なリンクについても学びを広げたいです。