Linuxを使っていると、「シンボリックリンク」という言葉を目にすることがあります。
シンボリックリンクは、ファイルやディレクトリを別のパスから参照するための仕組みです。Windowsのショートカットと似ていますが、まったく同じものではありません。また、Linuxには「ハードリンク」という別のリンク機能もあります。
この記事では、シンボリックリンクの基本的な意味から、ハードリンクやショートカットとの違い、Linuxでの作成・確認・削除方法まで、わかりやすく解説します。
シンボリックリンクとは?

シンボリックリンク(Symbolic Link)とは、ファイルやディレクトリを別のパスから参照するための特殊なファイルです。「シムリンク(Symlink)」や「ソフトリンク」と呼ばれることもあります。
例えば、次の場所にoriginal.txtというファイルがあるとします。
/home/user/documents/original.txtこのファイルを参照するシンボリックリンクとして、次の場所にlink.txtを作成します。
/home/user/link.txt/home/user/link.txtを開くと、実際には/home/user/documents/original.txtの内容が開かれます。
/home/user/link.txt
↓
/home/user/documents/original.txtoriginal.txtの内容がlink.txtにコピーされているわけではありません。/home/user/link.txtのシンボリックリンクには、参照先である/home/user/documents/original.txtのパスが記録されています。
そのため、シンボリックリンク経由でファイルを編集すると、参照先のファイルが変更されます。
このような仕組みを持つシンボリックリンクには、次のような特徴があります。
- ファイルだけでなく、ディレクトリにも作成できる
- 異なるファイルシステムやディスクにある対象も参照できる
- リンクそのものを削除しても、参照先は削除されない
- 参照先を削除・移動すると、リンクが機能しなくなる
参照先が存在しなくなったシンボリックリンクは、「リンク切れ」や「壊れたシンボリックリンク」と呼ばれます。
「シンボリックリンク」と「ハードリンク」の違い
Linuxには、「シンボリックリンク」のほかに「ハードリンク」という仕組みがあります。
シンボリックリンクが「参照先のパスを記録した別のファイル」であるのに対し、ハードリンクは「同じファイルの実体を指す、もう一つの名前」です。
| シンボリックリンク | ハードリンク | |
| 参照するもの | ファイルやディレクトリのパス | ファイルの実体 |
| 元の名前を削除した場合 | 基本的にリンク切れになる | データを引き続き参照できる |
| ディレクトリへの作成 | できる | 通常はできない |
| 異なるファイルシステムへの作成 | できる | できない |
| 作成コマンド | ln -s 対象 リンク名 | ln 対象 リンク名 |
例えば、original.txtへのシンボリックリンクとしてsymbolic.txtを作成した場合、symbolic.txtにはoriginal.txtへのパスが記録されます。そのため、original.txtを削除すると、symbolic.txtからファイルを開けなくなります。
一方、hard.txtというハードリンクを作成した場合、original.txtとhard.txtは同じファイルの実体を指します。original.txtという名前を削除しても、hard.txtが残っていればデータを開けます。すべてのハードリンクが削除され、どのファイル名からも参照されなくなると、そのファイルのデータも削除されます。
用途を簡単に分けると、別の場所からファイルやディレクトリを参照したい場合はシンボリックリンク、同じファイルの実体に別名を付けたい場合はハードリンクが適しています。
「シンボリックリンク」と「ショートカット」の違い
「シンボリックリンク」は、「Windowsのショートカット」と似ています。どちらも、別の場所にあるファイルやフォルダーへアクセスしやすくするための仕組みです。
ただし、OSやアプリケーションからの扱われ方には違いがあります。
| シンボリックリンク | Windowsのショートカット | |
| 主な仕組み | ファイルシステムのリンク機能 | リンク先などを保存した.lnkファイル |
| 主な用途 | システムやプログラムを含む幅広い場面 | 利用者がファイルやアプリを開くための導線 |
| アプリからの見え方 | 多くの場合、参照先のファイルやディレクトリとして扱われる | 通常は独立したショートカットファイルとして扱われる |
| プログラムでの利用 | 通常のパスに近い感覚で利用できる | 対応していないアプリでは参照先として扱えない場合がある |
例えば、プログラムが設定ファイルを決められたパスから読み込む場合、そのパスにシンボリックリンクを置けば、プログラムはリンク先の設定ファイルを読み込めます。
一方、同じ場所にWindowsのショートカットを置いても、プログラムが.lnkファイルを解釈しなければ、リンク先の設定ファイルとしては読み込めません。
つまり、ショートカットは主に人が操作しやすくするための機能、シンボリックリンクはOSやプログラムからも利用されるファイルシステム上の機能と考えると、違いを理解しやすいでしょう。
なお、Windowsにもショートカットとは別にシンボリックリンクの機能があります。
Linuxのシンボリックリンクの使い方
シンボリックリンクを作成する
Linuxでは、lnコマンドに-sオプションを付けてシンボリックリンクを作成します。
基本的な書き方は次のとおりです。
ln -s <ターゲットファイルまたはディレクトリ> <作成するリンク名>例えば、/home/user/documents/original.txtを参照する/home/user/link.txtを作成する場合は、次のコマンドを実行します。
ln -s /home/user/documents/original.txt /home/user/link.txtこの場合、/home/user/link.txtが/home/user/documents/original.txtを指すシンボリックリンクになります。
/home/user/link.txt
↓
/home/user/documents/original.txt次のコマンドを実行すると、シンボリックリンクを通じてoriginal.txtの内容を確認できます。
cat /home/user/link.txtシンボリックリンクを通じて内容を変更した場合は、リンク先の/home/user/documents/original.txtが変更されます。
-sオプションの意味
-sは、シンボリックリンクを作成するためのオプションです。-sの代わりに、長い形式の--symbolicを指定することもできます。
ln --symbolic <ターゲットファイルまたはディレクトリ> <作成するリンク名>-sまたは--symbolicを付けずにlnコマンドを実行すると、シンボリックリンクではなくハードリンクが作成されます。
ln <ターゲットファイル> <作成するリンク名>なお、ハードリンクは通常、ディレクトリに対して作成できません。
ディレクトリへのシンボリックリンクを作成する
シンボリックリンクは、ファイルだけでなくディレクトリに対しても作成できます。
例えば、/home/user/documents/original-directoryを参照する/home/user/link-directoryを作成する場合は、次のコマンドを実行します。
ln -s /home/user/documents/original-directory /home/user/link-directoryこの場合、/home/user/link-directoryが/home/user/documents/original-directoryを指すシンボリックリンクになります。
/home/user/link-directory
↓
/home/user/documents/original-directory次のコマンドを実行すると、シンボリックリンクを通じて/home/user/documents/original-directoryへ移動できます。
cd /home/user/link-directoryシンボリックリンクを確認する
作成したシンボリックリンクは、ls -lコマンドで確認できます。
ls -l /home/user/link.txt実行結果の例は次のとおりです。
lrwxrwxrwx 1 user user 33 Sep 10 10:00 /home/user/link.txt -> /home/user/documents/original.txt先頭のlは、そのファイルがシンボリックリンクであることを表します。
また、次の部分を見ると、/home/user/link.txtが/home/user/documents/original.txtを参照していることが分かります。
/home/user/link.txt -> /home/user/documents/original.txtリンク先のパスだけを確認したい場合は、readlinkコマンドを使用します。
readlink /home/user/link.txt実行結果は次のようになります。
/home/user/documents/original.txtreadlink -fコマンドについて
相対パスや途中にあるシンボリックリンクを解決し、最終的な参照先を絶対パスで確認したい場合は、readlink -fコマンドを使用します。
readlink -f /home/user/link.txt実行結果は次のようになります。
/home/user/documents/original.txt今回の例では、記録されている参照先が絶対パスで、パスの途中にも別のシンボリックリンクがないものとします。そのため、通常のreadlinkとreadlink -fの実行結果は同じになります。
相対パスで作成されたシンボリックリンクの場合、通常のreadlinkは記録されている相対パスを表示しますが、readlink -fは相対パスを解決した絶対パスを表示します。
シンボリックリンクを削除する
シンボリックリンクは、rmコマンドまたはunlinkコマンドで削除できます。
rm /home/user/link.txtunlinkコマンドを使って削除することもできます。
unlink /home/user/link.txtどちらのコマンドでも、削除されるのは/home/user/link.txtというシンボリックリンクだけです。リンク先の/home/user/documents/original.txtは削除されません。
ディレクトリを参照するシンボリックリンクも、同じようにリンク名を指定して削除できます。
rm /home/user/link-directoryunlinkコマンドを使って削除することもできます。
unlink /home/user/link-directoryどちらの方法でも、削除されるのは/home/user/link-directoryというシンボリックリンクだけです。リンク先の/home/user/documents/original-directoryは削除されません。
シンボリックリンクを削除するときに、rm -rを付ける必要はありません。リンク名だけを指定して、rmまたはunlinkで削除しましょう。また、リンク名の末尾には/を付けないようにします。末尾に/を付けると、コマンドや環境によってはリンク先のディレクトリとして扱われたり、エラーになったりすることがあります。
削除前にls -lで対象を確認しよう
削除前にls -lで対象を確認すると安心です。ls -lを実行すると、対象がシンボリックリンクかどうかを確認できます。
ls -l /home/user/link-directoryリンク先を変更する
既存のシンボリックリンクの参照先を変更する場合は、一度リンクを削除してから作り直す方法が分かりやすいです。
例えば、次のシンボリックリンクがあるとします。
/home/user/current -> /home/user/app/version1このリンクの参照先をversion2へ変更する場合は、次のコマンドを実行します。
unlink /home/user/current
ln -s /home/user/app/version2 /home/user/current変更後は、次のような関係になります。
/home/user/current -> /home/user/app/version2GNU版のlnを使用できるLinux環境では、次のコマンドで既存のリンクを置き換えることもできます。
ln -sfn /home/user/app/version2 /home/user/currentこの仕組みを利用すると、プログラムが使用する/home/user/currentというパスを変えずに、参照するバージョンだけを切り替えられます。
絶対パスと相対パスの違いに注意する
シンボリックリンクの参照先には、「絶対パス」と「相対パス」のどちらも指定できます。
絶対パスで作成する場合
絶対パスは、/home/userのようにルートディレクトリを表す/から始まるパスです。
ln -s /home/user/data/file.txt /home/user/link.txtこの場合、シンボリックリンクには次のパスが記録されます。
/home/user/data/file.txt絶対パスは、参照先が明確で分かりやすいのが特徴です。ただし、リンク先のファイルを別の場所へ移動すると、シンボリックリンクが機能しなくなります。
相対パスで作成する場合
相対パスは、シンボリックリンクを置くディレクトリを基準にして参照先を指定する方法です。
ln -s data/file.txt /home/user/link.txtこの例では、/home/user/link.txtが作成されます。リンクに記録される参照先はdata/file.txtです。
相対パスは、シンボリックリンクを置いた/home/userを基準に解釈されるため、実際には次のファイルが参照されます。
/home/user/data/file.txtつまり、次の関係になります。
/home/user/link.txt
↓
/home/user/data/file.txt相対パスの基準は、コマンドを実行したディレクトリではありません。シンボリックリンクが置かれているディレクトリが基準になる点に注意しましょう。
絶対パスは参照先が明確で分かりやすい一方、別の環境へディレクトリ一式を移動すると、リンク切れになる場合があります。
相対パスは、リンクと参照先の位置関係を維持したままディレクトリ一式を移動できるのがメリットです。ただし、コマンドを実行した場所ではなく、シンボリックリンクが置かれるディレクトリを基準に解釈される点に注意しましょう。
シンボリックリンクの主な活用例
シンボリックリンクは、ファイルやディレクトリの実体を一つの場所に置いたまま、別のパスから利用したいときに役立ちます。
主な活用例は次のとおりです。
- 深い階層にあるファイルやディレクトリを、短いパスから開けるようにする
- 複数の場所から同じ設定ファイルを参照する
- 実際のデータを別のディスクに移動しても、これまでと同じパスから利用できるようにする
- シンボリックリンクの参照先を変更して、アプリケーションのバージョンを切り替える
- Gitで管理している設定ファイルを、アプリケーションが読み込む場所から参照できるようにする
例えば、同じ設定ファイルを複数の場所にコピーすると、内容を変更するたびに、すべてのコピーを修正しなければなりません。修正を忘れると、場所によって設定内容が異なる状態になる可能性があります。
シンボリックリンクを使えば、設定ファイルの実体を一つにまとめたまま、複数の場所から同じファイルを参照できます。実体となるファイルを修正するだけで、どのシンボリックリンクから開いても変更後の内容が反映されます。
本記事のまとめ
この記事では「シンボリックリンク」について、以下の内容を説明しました。
- シンボリックリンクとは、別の場所にあるファイルやディレクトリを参照する特殊なファイル
- 参照先を削除・移動すると、基本的にリンク切れになる
- ハードリンクは、同じファイルの実体に付ける別名
- Windowsのショートカットよりも、通常のパスに近い形で扱われる
- Linuxでは
ln -s リンク先 リンク名で作成する - 削除するときは
rm リンク名またはunlink リンク名を使用する
シンボリックリンクを使うと、ファイルを複製せずに、別の場所や別の名前から同じファイルへアクセスできます。設定ファイルの共有やディレクトリの整理、アプリケーションのバージョン切り替えなど、Linuxのさまざまな場面で活用できる便利な機能です。
お読みいただきありがとうございました。