シンボリックリンクを相対パスで指定するときの注意点
lnコマンドの注意点
シンボリックリンクを相対パスで指定するときは、シンボリックリンクからの相対パスで指定する必要があります。
たとえば
$ ls dir entity.txt
※ entity.txt
はテキストファイル、dir
はディレクトリ
となってて、dir/
ディレクトリの中に、symlink
という名前で、entity.txt
を指すシンボリックリンクを相対パスで貼りたいときは以下のようにします。
# 正しい例 $ ln -s ../entity.txt dir/symlink
※ entity.txt
とdir
があるディレクトリで実行した場合
他のLinuxのコマンドは、今いるディレクトリから指定する場合がほとんどなので、感覚的には
# 間違った例 $ ln -s entity.txt dir/symlink
としたいところですが、これだと「ファイルがありません」と言われてしまいます。
ln
コマンドで指定する第一引数(実体ファイル: entity.txt
)は、symlinkを貼るディレクトリから見たパスを指定するので、dir
ディレクトリから一個上のentity.txt
なので、../entity.txt
が正解です。
第二引数は今いるディレクトリからシンボリックリンクまでのパスなので、特に問題はないかと思います。
回避方法
第一引数がシンボリックリンクから見たパスになっててややこしいので、まずシンボリックリンクを貼るディレクトリに移動しちゃいます。そこから実行すれば「シンボリックリンクから見たパス」と「今いるディレクトリのパス」が一致するので混乱せずに済みます。
あるいは絶対パスを使えば気にすることがなくなります。ただしファイルやディレクトリを移動するとリンクが参照できなくなるので注意です。相対パスで指定した場合も、参照できなくなりますが、相対パスの場合は「実体のあるファイルのパス」と「リンクがあるパス」の相対的な位置関係が崩れていなければそれぞれを移動しても参照できます。
ln
コマンドはちょっと注意が必要なコマンドです。