概要
ファイルやディレクトリへの別名参照を作成します。ハードリンクとシンボリックリンクの違いを理解して使い分けることが重要です。
基本構文
ln [オプション] 元 [リンク名]
ln -s [オプション] 元 [リンク名]
ln -t ディレクトリ 元...詳細解説
lnは、既存のファイルへ追加の参照を作るコマンドです。既定ではハードリンクを作成し、-sを付けるとシンボリックリンクを作成します。両者は見た目が似ていますが、指している対象の持ち方が大きく異なります。
ハードリンクは同じ実体へ別の名前を与える方法で、同じファイルシステム上でのみ作成できます。リンク先と元は同じ実体を共有するため、どちらから編集しても内容は同じです。一方、シンボリックリンクは「別のパスを指す小さな参照ファイル」です。対象が移動したり削除されたりすると参照切れを起こすことがありますが、別ファイルシステムやディレクトリにも張れます。
実務では、設定ファイルの切り替え、配布先の互換性維持、バージョン付きディレクトリの切り替え、共有ライブラリの参照整備などで頻繁に使います。ただし、リンクを増やすと見た目の所在と実体の所在がずれるため、調査や削除時にはls -liやreadlinkなどで実体関係を確認する癖が重要です。
このコマンドを使う場面
同じ実体へ複数の参照名を持たせたい時、バージョン切り替えや互換用の別名を作りたい時、リリース先を安全に差し替えたい時、ディレクトリ構成を変えずに参照だけ調整したい時に使います。
まず安全に試す方法
まずは作業用ディレクトリで通常ファイルに対する両方のリンクを作り、違いを観察します。
1. mkdir -p /tmp/ln-demo && cd /tmp/ln-demo
2. printf 'hello
' > original.txt
3. ln original.txt hard.txt
4. ln -s original.txt soft.txt
5. ls -li
6. readlink soft.txt
inode番号が同じかどうかと、シンボリックリンクが文字列として元のパスを保持していることを確認してください。
3分ミッション
少しでも手を動かすと定着しやすくなります。終わった項目にチェックを入れてください。
-
同じ元ファイルからハードリンクとシンボリックリンクを作り、ls -liとreadlinkで違いを確認します。
-
シンボリックリンクの元を移動し、参照切れになることを確認します。
資格試験との関連
-
LinuC レベル1
範囲: 1.02.3 ハードリンクとシンボリックリンク根拠: officiallnは、LinuCレベル1でハードリンクとシンボリックリンクを扱う中核コマンドです。
-
LPIC-1
範囲: 104.6 ハードリンクとシンボリックリンクの作成・変更根拠: officiallnは、LPIC-1でリンクの作成と理解を問う中心的なコマンドです。
-
共通基礎
範囲: リンクの基礎理解根拠: editorialリンクの違いを正しく理解すると、配置、移行、障害調査の精度が上がります。
実行結果サンプル
-
printf 'hellon' > original.txt ln original.txt hard.txt ls -li original.txt hard.txt12345 -rw-r--r-- 2 user user 6 4月 9 12:00 hard.txt 12345 -rw-r--r-- 2 user user 6 4月 9 12:00 original.txt -
ln -s original.txt soft.txt ls -l soft.txt readlink soft.txtlrwxrwxrwx 1 user user 12 4月 9 12:00 soft.txt -> original.txt original.txt
戻り値コード
- 0 正常終了。リンクの作成に成功しました。
- >0 対象不存在、既存名との衝突、権限不足、別ファイルシステム上へのハードリンク作成などで失敗しました。
使用例
ln src.txt hard.txtln -s /opt/app/current currentln -r -s ../releases/v2 appls -li
よくあるエラー
-
ハードリンクを別ファイルシステムへ作ろうとして失敗した 原因: ハードリンクは同一ファイルシステム内でしか作成できません。対処: 別ファイルシステムへ参照を張るならシンボリックリンクを使います。
-
リンクを消したのに実体が消えていない、または逆に実体が見えなくなった 原因: ハードリンクとシンボリックリンクの性質を混同しています。対処: ls -liやreadlinkで種別と実体を確認し、どれが実体でどれが参照かを整理します。
導入・互換性情報
POSIXでlnは標準化されていますが、相対リンク生成の-rやバックアップ制御などはGNU拡張です。最小構成環境では-s以外の便利機能が使えないことがあります。
ハードリンクは同一ファイルシステム内に限定され、通常はディレクトリに対して作成しません。シンボリックリンクはディレクトリにも張れますが、相対パスで作るか絶対パスで作るかで移設しやすさが変わります。
注意点 / セキュリティリスク
危険度は中程度です。特に-fを付けて既存のリンク名を置き換える時は、意図しない参照切り替えを起こすことがあります。サービスが参照するファイルの向き先を変える場合は、対象の実体と権限を必ず確認してください。
また、ハードリンクは「削除しても実体がすぐ消えない」ことがあり、シンボリックリンクは「見た目はあるのに実体へ届かない」ことがあります。削除や移行の前に、リンク種別と実体の位置を理解しておく必要があります。
FAQ
-
Q. ハードリンクとシンボリックリンクの最重要な違いは何ですか。 A. ハードリンクは同じ実体を共有し、シンボリックリンクは別のパスを指す参照ファイルです。
-
Q. ディレクトリに対しても使えますか。 A. 通常はシンボリックリンクで扱います。ハードリンクは一般的な運用ではディレクトリへ作成しません。
関連用語
参照リンク
- カテゴリー: File And Directory
- レベル: Basic
- 対応試験: LinuC, LinuC レベル1, LPIC, LPIC-1, 共通基礎