こんにちは、インフラエンジニアのryuです。
Linuxを操作していると、current -> releases/2026-07のように、矢印が付いたファイルを見かけることがあります。
これはシンボリックリンクです。
シンボリックリンクとは、別のファイルやディレクトリのパスを保存し、その場所へ案内する特殊なファイルです。
長いパスの短縮や、アプリケーションの参照先切り替えに使われます。
この記事では、作成・確認・削除方法、ハードリンクとの違い、リンク切れ、実務での用途を解説します。
シンボリックリンクとは¶
シンボリックリンクは、リンク先のパスを記録した特殊なファイルです。
リンクそのものに元ファイルの内容が保存されるわけではありません。
たとえば、次のディレクトリがあるとします。
/home/ryu/Photos
毎回この長いパスを指定する代わりに、ホームディレクトリへphotosというシンボリックリンクを作成できます。
/home/ryu/photos -> /home/ryu/Photos
/home/ryu/photosを開くと、Linuxはリンクに記録されたパスをたどり、/home/ryu/Photosへアクセスします。
シンボリックリンクは住所を書いたメモ¶
シンボリックリンクは、住所を書いたメモに例えると分かりやすいでしょう。

メモそのものは家ではありません。
メモに書かれた住所を確認し、その場所にある家へ向かいます。
シンボリックリンクも同じです。
リンクは元のファイルやディレクトリではなく、リンク先のパスを示しています。

リンク先の内容を変更すると、シンボリックリンクから開いた場合にも変更後の内容が表示されます。
反対に、リンク先を削除・移動すると、シンボリックリンクからアクセスできなくなります。
シンボリックリンクは何のために使う?¶
実務では、設定ファイルや共有ディレクトリ、アプリケーションのバージョン切り替えにも使われます。
| 用途 | 利用例 |
|---|---|
| 長いパスを短くする | /var/www/example/releases/20260723をcurrentで開く |
| 複数の場所から参照する | 共有ファイルを各ユーザーのホームから参照する |
| 設定ファイルを切り替える | 有効にする設定だけを別ディレクトリからリンクする |
| バージョンを切り替える | currentの参照先を新しいリリースへ変更する |
| コマンド名を統一する | バージョン付き実行ファイルへ共通名を付ける |
Webアプリのデプロイでは、次のような構成があります。
/var/www/example/
├── current -> releases/20260723
└── releases/
├── 20260720/
└── 20260723/
Webサーバーはcurrentを参照し、リンク先の変更でバージョンを切り替えます。
ln -sコマンドでシンボリックリンクを作成する¶
シンボリックリンクの作成には、lnコマンドへ-sオプションを付けます。
基本書式は次のとおりです。
ln -s リンク先 リンク名
最初にリンク先、次に作成するリンク名を指定します。
ファイルへのリンクを作成する¶
練習用のディレクトリとファイルを作成します。
mkdir -p ~/symbolic-link-practice/original
cd ~/symbolic-link-practice
echo "InfraAcademy" > original/message.txt
message.txtへのシンボリックリンクを作成します。
ln -s original/message.txt message-link.txt
リンクから内容を確認してみましょう。
cat message-link.txt
InfraAcademy
実際に読み込まれるのはoriginal/message.txtです。
ディレクトリへのリンクを作成する¶
シンボリックリンクは、ファイルだけでなくディレクトリにも作成できます。
ln -s original original-link
リンクを経由してディレクトリ内を確認します。
ls original-link
message.txt
ディレクトリへのシンボリックリンクも作成できます。
ls -lでシンボリックリンクを確認する¶
作成したリンクは、ls -lで確認できます。
ls -l
表示例は次のとおりです。
lrwxrwxrwx 1 ryu ryu 20 Jul 23 10:00 message-link.txt -> original/message.txt
lrwxrwxrwx 1 ryu ryu 8 Jul 23 10:01 original-link -> original
drwxr-xr-x 2 ryu ryu 25 Jul 23 09:59 original
先頭がlになっている項目がシンボリックリンクです。
行の末尾には、リンク名 -> リンク先という形式で参照先が表示されます。
| 表示 | 意味 |
|---|---|
l |
シンボリックリンク |
message-link.txt |
作成したリンクの名前 |
-> |
リンク先を示す矢印 |
original/message.txt |
リンクへ記録されたパス |
Linuxでは通常、アクセス可否はリンク先と途中のディレクトリ権限で決まります。
readlinkでリンク先を確認する¶
リンクに記録されたパスだけを確認したい場合は、readlinkコマンドを使います。
readlink message-link.txt
original/message.txt
実際に解決された絶対パスを確認する場合は、-fを付けます。
readlink -f message-link.txt
/home/ryu/symbolic-link-practice/original/message.txt
同じ目的でrealpathも利用できます。
realpath message-link.txt
絶対パスと相対パスのシンボリックリンク¶
シンボリックリンクには、絶対パスと相対パスのどちらも記録できます。
絶対パスで作成する¶
ln -s /home/ryu/symbolic-link-practice/original/message.txt message-absolute.txt
絶対パスは同じ場所を参照しますが、別環境へ移すとリンク切れになることがあります。
相対パスで作成する¶
ln -s original/message.txt message-relative.txt
相対パスは、シンボリックリンクが置かれているディレクトリを基準に解決されます。
コマンドを実行したカレントディレクトリを基準にするわけではありません。
次のような構成であれば、リンクとoriginalディレクトリをまとめて移動しても、位置関係が同じなら参照できます。
symbolic-link-practice/
├── message-relative.txt -> original/message.txt
└── original/
└── message.txt
一式を別の場所へ移す場合は、相対リンクが使いやすいことがあります。
シンボリックリンクとハードリンクの違い¶
lnコマンドは、-sを付けなければハードリンクを作成します。
シンボリックリンクとハードリンクは、どちらも別名でファイルへアクセスできますが、仕組みが異なります。
| 比較項目 | シンボリックリンク | ハードリンク |
|---|---|---|
| 作成コマンド | ln -s 元 リンク |
ln 元 リンク |
| 参照方法 | パスを保存する | 同じinodeを参照する |
| ファイルシステムをまたぐ | 可能 | 原則できない |
| ディレクトリへの作成 | 可能 | 通常はできない |
| 元ファイルを削除 | リンク切れになる | 内容へアクセスできる |
ls -lの先頭 |
l |
通常のファイルと同じ- |
| inode番号 | 元ファイルと異なる | 元ファイルと同じ |
inode番号は、ls -liで確認できます。
ln original/message.txt message-hard.txt
ls -li original/message.txt message-hard.txt message-link.txt
ハードリンクは同じinode、シンボリックリンクは異なるinodeになります。
元ファイルを削除した場合の違い¶
元ファイルを削除して動きを比較します。
rm original/message.txt
シンボリックリンクから開こうとすると、エラーになります。
cat message-link.txt
cat: message-link.txt: No such file or directory
ハードリンクが残っていれば、そこから内容を読み取れます。
cat message-hard.txt
ハードリンクは元ファイルのショートカットではなく、同じ実体に付けられた別の名前だからです。
リンク切れしたシンボリックリンクとは¶
リンクに記録されたパスが存在しない状態を、リンク切れやダングリングシンボリックリンクと呼びます。
次のような操作で発生します。
ln -s /tmp/not-found sample-link
リンク先が存在しなくても作成できます。
ls -l sample-link
lrwxrwxrwx 1 ryu ryu 14 Jul 23 10:20 sample-link -> /tmp/not-found
しかし、リンクを開くとエラーになります。
主な原因は、リンク先の削除・移動やパス指定ミスです。
リンク切れをfindで探す¶
カレントディレクトリ以下からリンク切れを探す場合は、次のコマンドを利用できます。
find . -xtype l
正常なシンボリックリンクも含めて探す場合は、次のように実行します。
find . -type l
削除前に利用状況を確認してください。
シンボリックリンクの参照先を変更する¶
シンボリックリンクの参照先を変える基本的な方法は、リンクを削除して作り直すことです。
rm message-link.txt
ln -s new/message.txt message-link.txt
rmで削除するのはリンクそのものです。
ln -sfnでリンクを置き換える¶
既存リンクを置き換える場合は、次のように実行できます。
ln -sfn new/message.txt message-link.txt
主なオプションは次のとおりです。
| オプション | 意味 |
|---|---|
-s |
シンボリックリンクを作成する |
-f |
既存のリンク先を置き換える |
-n |
リンク先がディレクトリでも、そのリンク自体を対象にする |
ディレクトリリンクの置換では-nを併用し、実行後に参照先を確認します。
シンボリックリンクを削除する¶
シンボリックリンクは、rmまたはunlinkで削除できます。
rm message-link.txt
または、次のように実行します。
unlink message-link.txt
リンク先のファイルやディレクトリは残ります。
ディレクトリリンクを削除するときの注意¶
ディレクトリを指すシンボリックリンクを削除するときは、リンク名の末尾へ/を付けない方が安全です。
rm original-link
リンク先のディレクトリを再帰的に削除するようなコマンドを安易に実行しないでください。
削除前に、次のコマンドで対象がリンクであることを確認しましょう。
ls -ld original-link
readlink original-link
シンボリックリンクをコピー・バックアップするときの注意¶
バックアップでは、リンクを保存するのか、参照先をコピーするのかを決めます。
たとえば、cp -aは属性を保ちながらコピーし、シンボリックリンクもリンクとして扱います。
cp -a source backup
一方、リンク先をたどるオプションを使用すると、リンクではなく参照先の内容がコピーされる場合があります。
tarやrsyncでもリンクをたどるオプションを確認し、復元後のパスも検証します。
シンボリックリンクのよくある疑問¶
シンボリックリンクはWindowsのショートカットと同じですか?¶
役割は似ていますが、仕組みは同じではありません。
シンボリックリンクはファイルシステム上のリンクとして、多くのLinuxコマンドやアプリケーションから通常のパスのように扱われます。
シンボリックリンクにchmodは必要ですか?¶
Linuxでは通常、シンボリックリンク自身の権限表示はアクセス可否の判断に使われません。
リンク先のファイルと、そこへ到達するまでのディレクトリ権限を確認してください。
リンク先を編集すると元ファイルも変わりますか?¶
変わります。
リンクから開いているのはリンク先のファイルなので、保存した変更はリンク先へ反映されます。
リンクを削除すると元ファイルも消えますか?¶
rm リンク名やunlink リンク名でリンクだけを削除した場合、リンク先は残ります。
ただし、リンクを経由してファイルを編集・削除するコマンドでは、リンク先が対象になる場合があります。
InfraAcademyのLinux中級講座でリンクを実践する¶
実際にリンクを作成し、元ファイルの変更や削除を試すと仕組みを理解できます。
InfraAcademyのLinux中級講座「ファイルの操作」では、圧縮・解凍、アーカイブ、ハードリンク、シンボリックリンクなどを学べます。
ブラウザ上のLinux環境でコマンドを実行できます。
次の順番で操作すると理解しやすくなります。
ファイルを作成する
→ シンボリックリンクを作成する
→ ls -liでinodeを確認する
→ ハードリンクを作成する
→ 元ファイルを削除する
→ それぞれのリンクからアクセスする
Linuxのディレクトリや基本コマンドに不安がある場合は、先にLinux入門講座から始めるのがおすすめです。
まとめ¶
シンボリックリンクは、別のファイルやディレクトリのパスを記録した特殊なファイルです。
作成するときは、ln -s リンク先 リンク名の順番で指定します。
ls -lではリンク名 -> リンク先を確認でき、readlinkやrealpathを使うと参照先のパスを表示できます。
シンボリックリンクはファイルシステムをまたいで作成でき、ディレクトリにも利用できます。一方、リンク先を削除・移動するとリンク切れになります。
ハードリンクは同じinodeを参照する別名であり、元の名前を削除しても実体が残っていればアクセスできます。
まずは練習用ディレクトリで、シンボリックリンクとハードリンクの両方を作成してみましょう。
元ファイルを変更・削除したときの違いを確認すると、リンクの仕組みを実践的に理解できます。