シンボリックリンクを作成した後で「参照先を変更したい」「リンク先のパスが変わってしまった」という場面に遭遇することがあります。
シンボリックリンクの変更は削除して再作成する方法と上書きオプションを使う方法の2通りがありますが、それぞれの手順と注意点を知っておくことが重要です。
この記事では、シンボリックリンクの変更方法と参照先更新の手順をわかりやすく解説していきます。
シンボリックリンクの変更はln -sfコマンドによる上書きが最もシンプルな方法である
それではまず、シンボリックリンクを変更する最もシンプルな方法について解説していきます。
既存のシンボリックリンクの参照先を変更するには「ln -sf 新しい参照先 リンク名」コマンドを使うのが最もシンプルで安全な方法です。
「-f(force)」オプションが既存のシンボリックリンクを強制的に上書きする役割を持ち、一度のコマンドで変更が完了します。
シンボリックリンクの変更で最も注意すべきは、ディレクトリシンボリックリンクを変更する際のパス末尾のスラッシュです。
「ln -sf /new/target/ existing_link」のようにスラッシュを付けると意図した動作にならないケースがあります。必ずパス末尾のスラッシュを省いてコマンドを実行しましょう。
シンボリックリンクの変更方法:上書き方式
続いては、ln -sfコマンドを使った上書き方式の詳細手順について確認していきます。
基本的な上書き変更の手順
ln -sfによるシンボリックリンク変更例
現在の状態を確認:ls -l current_link
表示例:current_link -> /old/path/file
新しい参照先に変更:ln -sf /new/path/file current_link
変更後の確認:ls -l current_link
表示例:current_link -> /new/path/file
-nオプションとの組み合わせ(ディレクトリリンクの変更)
ディレクトリへのシンボリックリンクを変更する際は「-n」オプションを追加することで、より安全に変更できます。
「ln -snf 新しい参照先 リンク名」という形で使用し、既存のディレクトリシンボリックリンクを安全に上書きできます。
-nオプションはリンク名がディレクトリシンボリックリンクの場合にそのリンク自体を対象として操作する指定であり、リンク先ディレクトリに新しいリンクが作られてしまうという誤動作を防ぎます。
シンボリックリンクの変更方法:削除して再作成
続いては、一度削除してから再作成するという方法について確認していきます。
削除から再作成の手順
削除→再作成によるシンボリックリンク変更手順
ステップ1:現在の状態を確認する → ls -l link_name
ステップ2:既存のシンボリックリンクを削除する → rm link_name または unlink link_name
ステップ3:新しい参照先で再作成する → ln -s /new/path link_name
ステップ4:変更を確認する → ls -l link_name
削除して再作成する方法は手順が明確でわかりやすいですが、削除から再作成までのわずかな時間にリンクが存在しない状態が生じる点に注意が必要です。
本番環境で稼働中のシステムに対して変更を行う場合は、ln -sfによる一括上書きの方が安全です。
バージョン切り替えでのシンボリックリンク変更活用例
続いては、シンボリックリンクの変更が特に有効なバージョン切り替えの活用例について確認していきます。
Webアプリケーションのデプロイでの活用
Webアプリケーションのデプロイでシンボリックリンクを活用することで、ダウンタイムほぼゼロでのバージョン切り替えが実現できます。
デプロイでのシンボリックリンク切り替え例
/var/www/releases/v1.0.0/ (旧バージョン)
/var/www/releases/v2.0.0/ (新バージョン・デプロイ済み)
/var/www/current → /var/www/releases/v1.0.0/ (現在の本番リンク)
バージョン切り替えコマンド:ln -snf /var/www/releases/v2.0.0 /var/www/current
このコマンド一発でアプリケーションが新バージョンに切り替わります。
ロールバックの容易さ
シンボリックリンクを使ったデプロイでは、問題が発生した際のロールバックもln -snfコマンド一つで旧バージョンに即座に戻すことができます。
CapistranoやDeployerなど多くのデプロイツールがこのシンボリックリンクを使ったデプロイ方式を採用しています。
まとめ
シンボリックリンクの変更は「ln -sf 新しい参照先 リンク名」コマンドで既存リンクを上書きするのが最もシンプルな方法です。
ディレクトリシンボリックリンクの変更では「ln -snf」を使うことで安全に変更でき、削除して再作成する方法は明確ですが短時間リンクが存在しない点に注意が必要です。
バージョン切り替えやデプロイでの活用ではシンボリックリンクの変更が非常に強力な手段となり、ダウンタイムほぼゼロでの本番環境の切り替えとロールバックを実現できるでしょう。
シンボリックリンクの変更コマンドをマスターして、システム管理とデプロイ作業の効率化に役立ててみてください。