ファイルに「別名」や「近道」を用意したいとき、Linux では ln コマンドが使えます。
ただ ln には「シンボリックリンク」と「ハードリンク」の2種類があり、最初はどちらを選ぶべきか迷いやすい部分です。
違いを曖昧にしたまま使うと、リンク先を移動した途端にリンクが切れる、といったつまずきにつながります。
この記事では2種類の違いと ln の基本的な使い方、そして初心者がハマりやすい落とし穴を整理しました。
そもそも「リンク」とは
リンクは、あるファイルへ別の名前でアクセスできるようにする仕組みです。
Windows の「ショートカット」に近いイメージですが、内部の作られ方しだいで挙動が変わります。
Linux では、ファイルの実体(データ)を識別するのが inode と呼ばれる管理番号です。
この inode を直接指すのがハードリンク、ファイルのパス(文字列)を指すのがシンボリックリンク——この違いがまず土台になります。
シンボリックリンクの作り方(ln -s)
シンボリックリンクは -s オプションを付けて作る、対象への「道しるべ」です。
# ln -s <リンク先(既存)> <リンク名(新規)>
ln -s /var/www/app/config.yml config.yml
引数は「先に対象、あとにリンク名」の順番で、cp や mv と同じ並びだと覚えると混乱しにくいです。
作ったリンクは ls -l で確認でき、矢印付きでリンク先が表示されます。
ls -l config.yml
# lrwxrwxrwx 1 user user 23 Jul 9 10:00 config.yml -> /var/www/app/config.yml
シンボリックリンクは別のディスク(ファイルシステム)をまたげるうえ、ディレクトリにも張れるのが強みです。
ハードリンクの作り方(ln)
ハードリンクは -s を付けずに作り、同じ inode を指す「もう一つの正式な名前」を増やします。
ln original.txt alias.txt
どちらの名前も対等で、片方を消してももう一方からデータへアクセスできます。
実体が本当に消えるのは、その inode を指す名前がすべてなくなったときです。
ただしハードリンクは別のファイルシステムをまたげず、通常はディレクトリに張れないという制約があります。
よくある落とし穴
引数の順番を逆にする
「リンク名 → 対象」と逆に打つと、意図しない場所に空のリンクができてしまうのです。
迷ったら「コピー元・コピー先」と同じ並びだと言い聞かせるのが確実です。
相対パスのシンボリックリンク
相対パスで作ったシンボリックリンクは、リンク自身の置かれた場所を基準にリンク先を解決します。
カレントディレクトリ基準だと勘違いすると、別の場所へ移動した途端にリンクが切れてしまうのです。
確実に動かしたいなら、リンク先は絶対パスで指定しておくのが安全です。
リンク切れ(dangling link)に気づきにくい
シンボリックリンクはパスを指しているだけなので、リンク先を消すと中身のない「宙ぶらりん」の状態になります。
ls -l ではリンク自体は残って見えるため、実際にアクセスするまで切れていると気づきにくいのが厄介です。
最後に
シンボリックリンクは「パスを指す道しるべ」、ハードリンクは「同じ実体を指す対等な名前」——この一点を押さえると、使い分けはぐっと楽になります。
まずは ln -s から使い始め、相対パスと絶対パスの挙動だけ意識しておけば、日常の運用で困る場面はほとんどありません。
以上です。









コメントを残す