1

と呼ばれるライブサーバーのシンボリックリンクがあり、ディレクトリにcurrentリリースがあります。releasescurrent -> releases/2012-05-08_15-13

ディレクトリのシンボリックリンクを更新したい場合はcurrent、それを unlink/rm し、再度 ln -s する必要があります。

私の質問は、シンボリックリンクを削除して最新リリースに更新するにはどうすればよいですか?

4

5 に答える 5

7

ln の形式は

ln -sf sourcefile targetlink

試す

ln -sf releases/2012-05-08_15-13 current

現在のリンクを削除して新しいリンクを作成します。

于 2012-05-08T14:18:30.593 に答える
3

単一のコマンドで実行したい場合は、@hughw が示唆するように実行して実行しますln -sf

シンボリックリンクをアトミックに置き換えたい場合 (つまり、シンボリックリンクが存在しない時点がないように)、新しいシンボリックリンクを作成しmvてから、古いシンボリックリンクを上書きします。

于 2012-05-08T14:23:07.350 に答える
0

この例では、-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
于 2016-08-25T18:42:00.097 に答える
0

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
于 2016-04-06T22:05:12.117 に答える