シンボリックリンクとハードリンクは何が違う? ― inodeを見て確かめる

Linux・CLI・DevOpsカテゴリを表すパンダのイラスト Linux・CLI・DevOps

この記事について
この記事は、生成AIを活用した自動生成フローで作成しています。GNU coreutilsのln仕様を確認し、mktempの一時領域だけでリンクとinodeを観察する形に整理しています。

検証ステータス:📘 GNU公式資料確認済み・実機未確認

名前だけ覚えるより、同じファイルへ2種類のリンクを作りls -liでinodeを見ると違いが分かります。

まず試す

d=$(mktemp -d); cd "$d"
printf 'hello\n' > original.txt
ln original.txt hard.txt
ln -s original.txt sym.txt
ls -li

ここを見る

original.txthard.txtはinode番号が同じです。sym.txtは別inodeで、表示には-> original.txtが出ます。

1か所変えてみる

rm original.txt
cat hard.txt
cat sym.txt

ハードリンク側から内容は読めても、シンボリックリンクは参照先名が消えたため失敗する点を観察します。

なぜそうなる

ハードリンクは同じinodeへ別名を追加します。シンボリックリンクは「参照先のpath」を内容として持つ別ファイルです。

graph LR
A[original.txt] --> I[inode/data]
H[hard.txt] --> I
S[sym.txt] --> A

仕事で使うなら

設定切替などでsymlinkは便利ですが、リンク切れを考慮します。hard linkはfilesystem境界やdirectoryへの制約があるため、単なるコピーの代替と決めつけません。

後始末: cd / && rm -rf "$d"

GNU ln: https://www.gnu.org/software/coreutils/manual/html_node/ln-invocation.html

文書情報

記事タイトル
シンボリックリンクとハードリンクは何が違う? ― inodeを見て確かめる
作成日
更新日
Source URL
https://papanda925.com/?p=15433

ライセンス: 本記事のうち、当サイトが権利を有する本文・自作図表は、特記なき限り CC BY 4.0 で利用できます。生成AIを活用して作成・編集した内容を含みます。コードについて、別途ライセンス表示またはリンク先GitHubリポジトリのライセンスがある場合は、その条件を優先します。引用・第三者資料・画像・商標等は本ライセンスの対象外です。 利用ポリシー

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