ln コマンドは、既存のファイルやディレクトリに対してリンク(別名)を作成するコマンドです。
ここでは、サーバ運用で特によく使うシンボリックリンクの作成を中心に解説します。
シンボリックリンクは、Windows でいう「ショートカット」のようなもので、
実体ファイルやディレクトリとは別の場所に「入口」を作るイメージです。
設定ファイルやログディレクトリへのアクセスを楽にしたり、アプリケーションのバージョン切り替えに使われたりします。
ln [OPTION]... [-T] TARGET LINK_NAMEln [OPTION]... TARGETln [OPTION]... TARGET... DIRECTORYln [OPTION]... -t DIRECTORY TARGET...
基本形では、第1引数にリンク元(TARGET)、第2引数にリンク名(LINK_NAME)を指定します。
-s オプションを付けるとシンボリックリンクになり、付けない場合はハードリンクになります。
第2引数が既存のディレクトリだった場合、そのディレクトリの中に TARGET と同じ名前のリンクが作成されます。
この挙動を変えたい場合は -t や -T を使用します。
・hoge ディレクトリをシンボリックリンクとして任意の場所に作成する
ln -s /usr/local/hoge/ /hoge/
/usr/local/hoge/ ディレクトリに対するシンボリックリンクを /hoge/ として作成します。
以降、/hoge/ にアクセスすると、実際には /usr/local/hoge/ が参照されます。
・設定ファイルへのシンボリックリンクを作成する
ln -s /etc/nginx/nginx.conf ~/nginx.conf
/etc/nginx/nginx.conf へのシンボリックリンクをホームディレクトリに作成し、
頻繁に参照する設定ファイルへのアクセスを簡単にします。
・リンク先ディレクトリ配下にまとめてリンクを作成する
ln -s app.conf db.conf /etc/myapp/
第2引数にディレクトリを指定すると、そのディレクトリ内に TARGET と同名のリンクが作成されます。
この例では、カレントディレクトリの app.conf と db.conf に対して、/etc/myapp/ 配下にシンボリックリンクを作成します。
・ターゲットディレクトリを明示的に指定してリンクを作成する
ln -s -t /etc/myapp/ app.conf db.conf
-t ディレクトリ を指定すると、第2引数にディレクトリを書かずとも、
指定したディレクトリに対してリンクを作成できます。
スクリプト内で、ターゲットディレクトリを変数化して扱いたい場合などに便利です。
・リンク名をディレクトリとして扱わず、1 つのシンボリックリンクとして扱う
ln -sT /opt/myapp/config.yml /etc/myapp
-T(–no-target-directory)を付けると、第2引数を「ディレクトリ」として解釈せず、
/etc/myapp という 1 つのリンクとして扱います。
既に /etc/myapp が存在している場合の挙動を制御したいときに使います。
・既存のリンクをバックアップを取りながら差し替える
ln -s -b --suffix=.bak /opt/myapp-2.0 /opt/myapp
-b(–backup)を付けると、既存のリンク(またはファイル)を上書きする前にバックアップを作成します。
–suffix でバックアップファイルのサフィックス(拡張子)を指定でき、
この例では /opt/myapp.bak にバックアップを退避してから、新しいリンクに差し替えます。
CONTROL の指定については、後述の「--backup の CONTROL に指定するオプション」を参照してください。
・アプリケーションの現在バージョンをシンボリックリンクで指し示す
ln -sfn /opt/myapp-2.0 /opt/myapp
-s でシンボリックリンク、-f で強制上書き、-n で既存リンクをディレクトリとしてたどらないようにします。
/opt/myapp を常に「現在使用しているバージョン」にしておき、
/opt/myapp-1.0・/opt/myapp-2.0 のようなディレクトリを切り替える運用でよく使われます。
・設定ファイルの場所を整理する
設定ファイルの実体は /opt/app/config/ 配下などにまとめておき、
/etc/app/config.yml からシンボリックリンクを張ることで、
「設定ファイルは /etc にある」という慣習を保ちつつ、実体をアプリケーション配下に整理できます。
・アプリケーションのバージョン切り替え
/opt/myapp → /opt/myapp-1.0 / /opt/myapp-2.0 のように、
シンボリックリンクを差し替えるだけでバージョンを切り替える構成は、リリースやロールバックを簡単にします。
・ログディレクトリの抽象化
/var/log/app から、実際のログ保存先である /data/log/app へのリンクを張ることで、
ストレージ構成を変えても、アプリケーションや運用スクリプトから見えるパスを一定に保つことができます。
・パスの互換性維持
システム移行時などに、旧環境のパスと新環境のパスが異なる場合、
旧パスにシンボリックリンクを作成しておくことで、アプリケーション変更無しで動かせるケースもあります。
ln コマンドはディレクトリ構造やパス設計を柔軟に保つための道具です。
特にシンボリックリンクは、「実体の場所」と「見せたいパス」を切り離すために、インフラ設計でよく使われます。
| short option | long option | description |
|---|---|---|
| -s | --symbolic | ハードリンクではなくシンボリックリンクを作成する |
| -f | --force | 既存のファイルやリンクが存在する場合でも確認無しで上書きしてリンクを作成する |
| -n | --no-dereference | リンク名が既存のシンボリックリンクでもそのリンク先をたどらずリンク名そのものを対象として扱う |
| -b | --backup | 上書きする前に既存ファイルやリンクのバックアップを作成する(CONTROL により方式を指定) |
| -S | --suffix | バックアップファイルに付与するサフィックス(拡張子)を指定する(デフォルトは ~) |
| -r | --relative | リンク先へのパスを相対パスとして自動調整してシンボリックリンクを作成する(GNU ln の拡張) |
| -t | --target-directory | 第2引数ではなくこのオプションで指定したディレクトリにリンクを作成する |
| -T | --no-target-directory | 第2引数をディレクトリとして扱わず常に 1 つのリンク名として扱う |
| -v | --verbose | 作成・更新したリンクの情報を詳細に表示する |
| -L | --logical | リンク作成時にシンボリックリンクをたどって論理的なパスに対して処理する |
| -P | --physical | リンク作成時にシンボリックリンクをたどらず物理的なパスのとおりに処理する(デフォルトの動作に近い) |
| -d | --directory | ディレクトリに対してハードリンクを作成する(通常は root のみ使用・非推奨) |
| -h | --help | ln コマンドの使い方(ヘルプ)を表示して終了する |
| -V | --version | ln コマンドのバージョン情報を表示して終了する |
ここでは、GNU coreutils ベースの ln コマンドでよく使われる主なオプションを TablePress で一覧化している想定です。
実際に利用できるオプションや挙動は、ディストリビューションやバージョンによって異なる場合があるため、
本番環境で使用する前に man ln で最新の仕様を確認してください。
--backup の CONTROL に指定するオプション
| short option | long option | description |
|---|---|---|
| none | off | バックアップを作成しない(--backup を指定してもバックアップを取らない設定) |
| simple | 元ファイル名の末尾に ~ を付けたバックアップファイルを作成する(例: file → file~) | |
| numbered | 元ファイル名の末尾に .~番号~ を付けた世代管理バックアップを作成する(例: file → file.~1~) | |
| existing | 既存のバックアップがある場合は numbered を、それ以外の場合は simple を使用してバックアップを作成する |
--backup[=CONTROL] は、既存ファイルやリンクを上書きする前にバックアップを作成するためのオプションです。
CONTROL によって、バックアップファイル名の付け方(~ を付けるか、世代管理するか など)を制御できます。
新着情報
ブログランキングに参加しています。クリックして応援していただけると嬉しいです。

人気ブログランキング
![]()
にほんブログ村