シンボリックリンクとは?作成・確認・削除方法をわかりやすく解説!

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.txt

original.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.txthard.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.txt

readlink -fコマンドについて

相対パスや途中にあるシンボリックリンクを解決し、最終的な参照先を絶対パスで確認したい場合は、readlink -fコマンドを使用します。

readlink -f /home/user/link.txt

実行結果は次のようになります。

/home/user/documents/original.txt

今回の例では、記録されている参照先が絶対パスで、パスの途中にも別のシンボリックリンクがないものとします。そのため、通常のreadlinkreadlink -fの実行結果は同じになります。

相対パスで作成されたシンボリックリンクの場合、通常のreadlinkは記録されている相対パスを表示しますが、readlink -fは相対パスを解決した絶対パスを表示します。

シンボリックリンクを削除する

シンボリックリンクは、rmコマンドまたはunlinkコマンドで削除できます。

rm /home/user/link.txt

unlinkコマンドを使って削除することもできます。

unlink /home/user/link.txt

どちらのコマンドでも、削除されるのは/home/user/link.txtというシンボリックリンクだけです。リンク先の/home/user/documents/original.txtは削除されません。

ディレクトリを参照するシンボリックリンクも、同じようにリンク名を指定して削除できます。

rm /home/user/link-directory

unlinkコマンドを使って削除することもできます。

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/version2

GNU版の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のさまざまな場面で活用できる便利な機能です。

お読みいただきありがとうございました。

スポンサーリンク