Symbolic link
Linux の Symbolic link File (シンボリックリンクファイル) とは、Windows でいうショートカットのようなもので、ディレクトリやファイルを参照するファイル。対象までのパスを含んだ小さなファイル。
Hard link との違い
-
Hard link は、Hard link を削除することで参照先ファイル・ディレクトリが削除される。
-
Symbolic link は、Symbolic link を通じての参照先ファイル・ディレクトリの削除はできない。
Symbolic link File 自体を削除しても参照先のファイル・ディレクトリへの影響はない。また、参照先のファイル・ディレクトリが削除されても Symbolic link File は残る。
Symbolic link を作成する
ln -s 参照先ディレクトリ(ファイル)のパス [シンボリックリンクのファイル名]
ln コマンド
... ディレクトリやファイルへのリンクを登録する。-s を付けると Symbolic link、つけないと Hard link となる。
※ 参照先ファイル、シンボリックリンクのファイル名部分は、フルパスでも相対パスでも指定可能。
シンボリックリンクのファイル名は省略可能で、省略した場合、参照先に指定した同じファイル名/ディレクトリ名でカレントディレクトリに Symbolic link が作成される。
活用例
- ファイル
ファイルにリンクを貼ってみます。
$ pwd
> /usr/local/bin
$ ln -s /opt/other/module/bin/ruby ruby
/usr/local/bin/ruby
を使おうとすると /opt/other/module/bin/ruby
を使うようになります。
- ディレクトリ
ディレクトリにリンク貼った時はこんな感じです。
$ touch work/target/test.txt # test.txt を作っておく
$ ln -s work/target target # ディレクトリに symlink をはる
$ echo abc > target/test.txt # symlink を使ってみる
$ cat work/target/test.txt # 参照元のディレクトリ配下に反映されている
> abc
Symbolic link File の消し方
unlink
と rm
どちらでも消せますが、rm
はディレクトリも消せてしまうため、unlink を使う方が安全らしいです。(coreutils ではソースが違うが、FreeBSD だと unlink は rm のハードリンクなので、ディレクトリ削除ができない rm と考えて良さそう。)
$ unlink symlink
Symbolic link を経由せずにカレントディレクトリを表示する
pwd -P
で Symbolic link を経由せずにカレントディレクトリを表示することができる。
$ ln -s /User/qiita/here /here
$ cd /here
$ pwd # リンクを辿らずにリンク元のカレントディレクトリを表示
> /here
$ pwd -L # こちらもリンクを辿らずにリンク元のカレントディレクトリを表示
> /here
$ pwd -P # リンクを辿ってリンク先のカレントディレクトリを表示
> /User/qiita/here