シンボリックリンクとハードリンクの違い|lnの使い方

シンボリックリンクとハードリンクの違い|lnの使い方

ファイルに「別名」や「近道」を用意したいとき、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 から使い始め、相対パスと絶対パスの挙動だけ意識しておけば、日常の運用で困る場面はほとんどありません。

2>&1 の意味とは?標準出力・標準エラー出力とリダイレクトを整理

以上です。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA