我有一个名为我的实时服务器的符号链接,我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
将其覆盖旧符号链接。
正如 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
正确答案:
ln -s new current_tmp && mv -Tf current_tmp current
移动是原子操作。
不要使用“ln -snf”。strace 'ln -snf' 显示了两个系统调用 unlink + symlink。
此示例清除了 -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