と呼ばれるライブサーバーのシンボリックリンクがあり、ディレクトリにcurrent
リリースがあります。releases
current -> releases/2012-05-08_15-13
ディレクトリのシンボリックリンクを更新したい場合はcurrent
、それを unlink/rm し、再度 ln -s する必要があります。
私の質問は、シンボリックリンクを削除して最新リリースに更新するにはどうすればよいですか?
ln の形式は
ln -sf sourcefile targetlink
試す
ln -sf releases/2012-05-08_15-13 current
現在のリンクを削除して新しいリンクを作成します。
単一のコマンドで実行したい場合は、@hughw が示唆するように実行して実行しますln -sf
。
シンボリックリンクをアトミックに置き換えたい場合 (つまり、シンボリックリンクが存在しない時点がないように)、新しいシンボリックリンクを作成しmv
てから、古いシンボリックリンクを上書きします。
この例では、-sfn スイッチの使用をクリアしています。
drwxr-xr-x. 10 root root 4096 Aug 25 18:24 .
dr-xr-xr-x. 25 root root 4096 Aug 19 10:32 ..
lrwxrwxrwx. 1 wildfly wildfly 25 Aug 25 18:15 wildfly -> /opt/wildfly-8.2.0.Final/
drwxr-xr-x. 10 wildfly wildfly 4096 Aug 25 18:28 wildfly-8.2.0.Final
link to link
| |
[gecloud@ip-10-227-224-45 opt]$ sudo ln -sfn wildfly-8.2.0.Final /opt/wildfly
[gecloud@ip-10-227-224-45 opt]$ ls -la
total 115540
drwxr-xr-x. 10 root root 4096 Aug 25 18:34 .
dr-xr-xr-x. 25 root root 4096 Aug 19 10:32 ..
lrwxrwxrwx. 1 root root 19 Aug 25 18:34 wildfly -> wildfly-8.2.0.Final
drwxr-xr-x. 10 wildfly wildfly 4096 Aug 25 18:28 wildfly-8.2.0.Final
ToddR が示唆しているように、おそらくほとんどの種類の Linux (間違いなく Ubuntu) で実際に機能する唯一の答えは、coreutils パッケージの ln を使用します)。証明させてください。
matthewh@xen:~$ mkdir -p releases/dirA
matthewh@xen:~$ mkdir -p releases/dirB
matthewh@xen:~$ ln -s releases/dirA
matthewh@xen:~$ ls -l dirA
lrwxrwxrwx 1 matthewh matthewh 13 Apr 7 09:58 dirA -> releases/dirA
matthewh@xen:~$ ln -sf releases/dirB
matthewh@xen:~$ rm dirA
matthewh@xen:~$ ln -s releases/dirA current
matthewh@xen:~$ ln -sf releases/dirB current
matthewh@xen:~$ ls -l current
lrwxrwxrwx 1 matthewh matthewh 13 Apr 7 09:59 current -> releases/dirA <--- DOESN'T WORK!
matthewh@xen:~$ ln -sfn releases/dirB current <--- WORKS!
matthewh@xen:~$ ls -l current
lrwxrwxrwx 1 matthewh matthewh 13 Apr 7 09:59 current -> releases/dirB
したがって、Linux での正しい方法は次のとおりです。
ln -sfn source target
-n, --no-dereference ディレクトリへのシンボリックリンクの場合、LINK_NAME を通常のファイルとして扱います
これは必須です。-n スイッチを使用しないと、ソース ディレクトリ内に「target」という名前のシンボリック リンクが作成されます。
私の例では、
matthewh@xen:~$ ls -l releases/dirA/
total 0
lrwxrwxrwx 1 matthewh matthewh 13 Apr 7 10:03 dirB -> releases/dirB