lnコマンドでシンボリックリンクを作成する方法|ハードリンクとの違いもコマンド

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOMELinux技術 リナックスマスター.JP(Linuxマスター.JP)Linuxコマンド, LinuxコマンドK-O, ファイル・ディレクトリ管理コマンド > lnコマンドでシンボリックリンクを作成する方法|ハードリンクとの違いもコマンド
「シンボリックリンクって何?ハードリンクとどう違うの?」

Linuxの設定ファイルを管理したり、コマンドのバージョンを切り替えたりする場面で、必ず登場するのがlnコマンドです。

この記事では、lnコマンドによるシンボリックリンク(ソフトリンク)の作成方法を中心に、ハードリンクとの違い、ls -lでの確認方法、リンク切れの対処法まで、実務で使う知識をまとめて解説します。
【この記事でわかること】 ・シンボリックリンクは別ファイル・ディレクトリへのショートカットで、ln -s リンク元 リンク名 で作成する
・ハードリンクは同じ inode を参照する実体の別名で、異なるファイルシステムやディレクトリには作れない
・ls -l でシンボリックリンクは l と -> で確認できる
・リンク切れ(参照先が消えた状態)は ls -la や find -L で検出できる
・PythonやNode.jsのバージョン切り替えなどコマンドの向き先変更にシンボリックリンクが活用される

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
図解60P/登録10秒/解除も3秒 / 詳細はこちら

シンボリックリンクとは何か?なぜ使うのか

シンボリックリンク(symlink)とは、別のファイルやディレクトリへの「ショートカット」のようなものです。Windows のショートカットに近い概念ですが、OSレベルで透過的に動作するため、アプリケーションからは通常のファイルと同じように扱えます。

シンボリックリンクが活躍する場面は、主に以下の3つです。

設定ファイルの一元管理:/etc 配下の設定ファイルを別の場所で管理し、シンボリックリンクで参照させる
バージョンの切り替え:/usr/local/bin/python を python3.11 や python3.12 に向け替える
共有ライブラリの管理:libssl.so → libssl.so.3.0.1 のように、バージョン番号付きファイルへリンクする

実際のサーバー運用では、シンボリックリンクを使わない日はないと言っても過言ではありません。

lnコマンドでシンボリックリンクを作成する

シンボリックリンクの作成には、lnコマンドに -s オプションを付けて実行します。

1. 基本の書式

書式は以下のとおりです。

# シンボリックリンクの作成 ln -s リンク先(実体ファイル) リンク名(作成するリンク)

ポイントは引数の順番です。「リンク先(実体)」が先、「リンク名(作成するもの)」が後になります。この順番を間違えるとリンクの向きが逆になるので注意してください。

2. ファイルへのシンボリックリンクを作成する

たとえば、/etc/nginx/sites-available/mysite.conf へのシンボリックリンクを sites-enabled ディレクトリに作成する場合は、次のように実行します。

# Nginx のサイト設定を有効化する例 ln -s /etc/nginx/sites-available/mysite.conf /etc/nginx/sites-enabled/mysite.conf

これはNginxやApacheの設定管理で日常的に使われるパターンです。

3. ディレクトリへのシンボリックリンクを作成する

ディレクトリに対しても、同じ -s オプションで作成できます。

# /var/log/app を /home/admin/logs としてアクセスできるようにする ln -s /var/log/app /home/admin/logs

これで /home/admin/logs にアクセスすると、実際には /var/log/app の中身が表示されます。

4. 既存のリンクを上書きする(-sfオプション)

すでにリンクが存在する場合、そのままlnを実行するとエラーになります。-f(force)オプションを付けると、既存のリンクを削除してから新しいリンクを作成してくれます。

# 既存のシンボリックリンクを上書き ln -sf /usr/local/python3.12/bin/python3 /usr/local/bin/python3

バージョン切り替えの場面では、この -sf の組み合わせが非常に便利です。

ハードリンクを作成する(-sなし)

lnコマンドを -s オプションなしで実行すると、ハードリンクが作成されます。

1. ハードリンクの基本

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

ハードリンクは、同じファイルの実体(inode)に別の名前を付ける仕組みです。元のファイルを削除しても、ハードリンク側からデータにアクセスできます。

2. ハードリンクの制約

ハードリンクには、シンボリックリンクにはない制約があります。

ディレクトリには作成できない:ファイルシステムの循環参照を防ぐため、一般ユーザーはディレクトリのハードリンクを作成できません
パーティションをまたげない:ハードリンクは同一ファイルシステム内でしか作成できません。異なるパーティション間ではシンボリックリンクを使ってください
リンクが切れない代わりに追跡しにくい:どのファイルがハードリンクの関係にあるかを確認するには、inode番号を調べる必要があります

シンボリックリンクとハードリンクの違い

2つのリンクの違いを表で整理しましょう。
比較項目 シンボリックリンク ハードリンク
作成コマンド ln -s ln
仕組み パス名を参照する inode(実体)を共有する
元ファイルを削除した場合 リンク切れになる データにアクセスできる
ディレクトリへのリンク 可能 不可
パーティションをまたぐリンク 可能 不可
ls -lでの表示 l で始まり → で先を表示 通常のファイルと同じ
実務では9割以上の場面でシンボリックリンクを使います。ハードリンクは「元ファイルが削除されてもデータを残したい」という特殊なケースで使うものと覚えておけば十分です。

ls -lでシンボリックリンクを確認する

シンボリックリンクの確認には ls -l コマンドを使います。

# シンボリックリンクの確認 ls -l /usr/local/bin/python3 # 出力例 lrwxrwxrwx 1 root root 38 Jan 15 10:30 /usr/local/bin/python3 -> /usr/local/python3.12/bin/python3

確認すべきポイントは3つです。

先頭の「l」:ファイルタイプがシンボリックリンクであることを示します。通常のファイルは「-」、ディレクトリは「d」です
「->」の表示:リンク名の後ろに「->」とリンク先のパスが表示されます
パーミッション「rwxrwxrwx」:シンボリックリンク自体のパーミッションは常に777です。アクセス制御はリンク先のファイルのパーミッションで行われます

ハードリンクの確認方法

ハードリンクは ls -l だけでは判別できません。ls -li でinode番号を表示して、同じ番号のファイルを探します。

# inode番号を表示してハードリンクを確認 ls -li original.txt hardlink.txt # 出力例(inode番号が同じならハードリンク) 1234567 -rw-r--r-- 2 user user 100 Jan 15 10:30 original.txt 1234567 -rw-r--r-- 2 user user 100 Jan 15 10:30 hardlink.txt

inode番号(先頭の数字)が同じであれば、それらはハードリンクの関係にあります。また、パーミッション表示の直後にある「2」がリンク数で、このファイルの実体を指す名前が2つあることを意味しています。

実務で使えるシンボリックリンク活用Tips

1. コマンドのバージョン切り替え

複数バージョンのPythonやNode.jsをインストールしている場合、シンボリックリンクで使用するバージョンを切り替えられます。

# Python 3.12 を python3 として使う ln -sf /usr/local/python3.12/bin/python3 /usr/local/bin/python3 # バージョンを確認 python3 --version

2. 設定ファイルの管理

Git で設定ファイルをバージョン管理し、実際の配置先にはシンボリックリンクを張る運用は、サーバー管理の定番パターンです。

# Git管理下の設定ファイルをリンクで配置 ln -sf /home/admin/config-repo/nginx.conf /etc/nginx/nginx.conf ln -sf /home/admin/config-repo/my.cnf /etc/my.cnf

この方法なら、設定の変更履歴をGitで追跡でき、ロールバックも容易です。

3. ログディレクトリへのショートカット

深い階層にあるログディレクトリへのアクセスを楽にするのも、よくある使い方です。

# ログディレクトリへのショートカット ln -s /var/log/httpd /root/httpd-logs

トラブルシュート:リンク切れとエラー対処

「No such file or directory」- リンク切れの対処

シンボリックリンクのリンク先が削除されると、リンク切れ(dangling symlink)になります。ls -l で確認すると、リンク先のパスが表示されたままですが、アクセスしようとするとエラーになります。

# リンク切れの確認 ls -l /path/to/broken-link # リンク切れを検出する(カレントディレクトリ以下) find . -type l ! -exec test -e {} \; -print

リンク切れを見つけたら、リンク先のファイルを復元するか、不要なリンクを削除してください。

「Too many levels of symbolic links」の対処

このエラーは、シンボリックリンクが循環参照(AがBを指し、BがAを指す)を起こしている場合に発生します。

# 循環参照の例(これをやってはいけない) ln -s /tmp/link_b /tmp/link_a ln -s /tmp/link_a /tmp/link_b # リンク先をたどって確認 readlink -f /tmp/link_a

readlink -f コマンドで最終的なリンク先を確認し、循環しているリンクを特定して削除しましょう。

シンボリックリンクの削除方法

シンボリックリンクの削除には rm または unlink を使います。どちらもリンクだけを削除し、リンク先の実体ファイルには影響しません。

# rmで削除 rm /path/to/symlink # unlinkで削除 unlink /path/to/symlink

※ディレクトリへのシンボリックリンクを削除する際は、末尾にスラッシュを付けないでください。「rm /path/to/symlink/」とすると、リンク先ディレクトリの中身を削除しようとする場合があります。必ず「rm /path/to/symlink」としてください。

本記事のまとめ

やりたいこと コマンド
シンボリックリンクを作成する ln -s リンク先 リンク名
ハードリンクを作成する ln リンク先 リンク名
既存リンクを上書きして作成する ln -sf リンク先 リンク名
シンボリックリンクを確認する ls -l ファイル名
inode番号でハードリンクを確認する ls -li ファイル名
リンクの最終的な実体を確認する readlink -f リンク名
リンク切れを検出する find パス -type l ! -exec test -e {} \; -print
シンボリックリンクを削除する rm リンク名

シンボリックリンクとハードリンクの違いを正確に説明できますか?

コマンドの使い方を一つひとつ覚えていくのは時間がかかります。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。

「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

登録10秒/合わなければ解除3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として15年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。