linux 如何在一个命令中删除和重新创建现有的符号链接?[已关闭]

yk9xbfzb  于 2023-10-16  发布在  Linux
关注(0)|答案(5)|浏览(164)

已关闭此问题为not about programming or software development。它目前不接受回答。

这个问题似乎不是关于a specific programming problem, a software algorithm, or software tools primarily used by programmers的。如果你认为这个问题与another Stack Exchange site的主题有关,你可以留下评论,解释在哪里可以回答这个问题。
26天前关闭
Improve this question
我的实时服务器有一个symbolic link,名为current,我在releases目录中有发行版,即current -> releases/2012-05-08_15-13
如果我想更新我的current目录的符号链接,我必须unlink/rm它和re ln -s它。
如何删除符号链接并一步完成更新到最新版本?

atmip9wb

atmip9wb1#

ln的形式是

ln -sf sourcefile targetlink

尝试

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

删除当前链接并创建新链接。

flvlnr44

flvlnr442#

如果你想在一个命令中完成它,按照@hughw的建议,运行ln -sf
如果你想原子地替换符号链接(即。这样就不会有符号链接不存在的时间点)创建一个新的符号链接,然后mv它覆盖旧的符号链接。

vpfxa7rd

vpfxa7rd3#

正如ToddR所建议的那样,这是唯一一个实际上适用于大多数Linux版本的答案-绝对是Ubuntu-它使用来自coreutils包的 * ln *)。让我证明给你看。

$ cd ~
$ mkdir -p releases/dirA
$ mkdir -p releases/dirB
$ ln -s releases/dirA
$ ls -l dirA
lrwxrwxrwx 1 matthewh matthewh 13 Apr  7 09:58 dirA -> releases/dirA
$ ln -sf releases/dirB
$ rm dirA
$ ln -s releases/dirA current
$ ln -sf releases/dirB current
$ ls -l current
lrwxrwxrwx 1 matthewh matthewh 13 Apr  7 09:59 current -> releases/dirA  <--- DOESN'T WORK!
$ ln -sfn releases/dirB current <--- WORKS!
$ 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”的符号链接。
在我的例子中,

$ ls -l releases/dirA/

total 0
lrwxrwxrwx 1 matthewh matthewh 13 Apr  7 10:03 dirB -> releases/dirB
7qhs6swi

7qhs6swi4#

正确答案:

ln -s new current_tmp && mv -Tf current_tmp current

移动是一个原子操作。
不要用“In-snf”。strace 'ln -snf'显示了两个系统调用,unlink + symlink

pvabu6sv

pvabu6sv5#

此示例清除了 -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
                  |                 |
sudo ln -sfn wildfly-8.2.0.Final /opt/wildfly
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

相关问题