🔥

シンボリックリンク(Symlink)を相対記述する

2021/02/27に公開

毎回なんだかんだ迷ってしまう、シンボリックリンクの相対記述についてメモ。

記述方法

結論から書くとこんな形です。

$ ln -s [参照先:シンボリックリンクを置きたいディレクトリからみたリンク先の相対パス] [参照元:シンボリックリンクを置きたいディレクトリ]

下記のようなディレクトリ構造として

root/
  ├ public/
  └ storage/
    └ public/

[root/public/storage]にアクセスされたときに[root/storage/public]を参照したい場合は下記になります。

$ pwd
root/ # いまroot階層にいる状態

$ cd public # public階層に移動
$ ln -s ../storage/public ./storage

解説

参照先:../storage/public

まずこれのややこしい点が2点。

  • 記述順序として、先に参照先を書かないといけない
  • 自身のいる階層からの相対パスではなく、シンボリックリンクを置く場所からの相対パスを書く

普通のコマンド指定としては参照元を書いて参照先を書く気がしますが、シンボリックリンクではこれが逆です。

また「シンボリックリンクを置く場所からの相対パスを書く」のも注意です。自身のいる階層は関係ありません。
例では下記のような構造になっており、

root/
  ├ public/
  │   └ storage/ (シンボリックリンクによる仮想ディレクトリ)
  └ storage/
      └ public/ (実際に参照したいディレクトリ)

root/public/storageにアクセスしたときにroot/storage/publicを参照したいので、
[実際に参照したいディレクトリ]は[シンボリックリンクによる仮想ディレクトリ]から見て

ひとつ上の階層のstorageディレクトリ内のpublic

となるので、記述は

../storage/public

となります。

参照元:./storage

こちらは単に参照元(シンボリックリンクによる仮想ディレクトリを設置したい場所)になります。こちらは自身のいる箇所からの相対パスで書く(これがまた逆にややこしい。。)ので

./storage もしくは単に storage

でOKです。

設定の確認

シンボリックリンクが正常に張れているかどうか、lsコマンドに-lオプションを付けて確認できます。

$ ls -l
lrwxr-xr-x  1 user  user   17  1  1 00:00 storage -> ../storage/public

storageにアクセスしたとき、ひとつ上の階層のstorage内publicを参照する設定になっています!

Discussion