无法覆盖Symbolic Link RedHat Linux

时间:2011-03-09 18:22:47

标签: linux symlink redhat

我创建了一个符号链接:

sudo ln -s /some/dir new_dir

现在我想覆盖符号链接以指向新位置,它不会覆盖。我试过了:

sudo ln -f -s /other/dir new_dir

我总是可以sudo rm new_dir,但如果可能的话,我宁愿相应地覆盖它。有什么想法吗?

3 个答案:

答案 0 :(得分:61)

ln -sfn /other/dir new_dir

适合我。 -n不会取消引用目标符号链接。

答案 1 :(得分:9)

您可以创建它,然后移动它:

sudo ln -f -s /other/dir __new_dir
sudo mv -Tf __new_dir new_dir

编辑:缺少-Tf,将目录视为常规文件,不提示覆盖。

这样你就会覆盖它。

答案 2 :(得分:1)

由于来自mikeytown2s评论的链接被破坏,我将解释为什么redent84s answer更好:

虽然

ln -sfn newDir currentDir

完成工作,它不是原子操作,你可以用strace看到:

$ strace ln -snf newDir currentDir 2>&1 | grep link
unlink("currentDir")         = 0
symlink("newDir", "currentDir") = 0

当您有一个指向该符号链接的Web服务器根目录时,这很重要。删除符号链接并再次创建时,它可能会导致错误 - 即使在一微秒的时间内也是如此。

要防止错误,请改用:

$ ln -s newDir tmpCurrentDir && mv -Tf tmpCurrentDir currentDir

这将创建一个临时链接,之后在原子操作中覆盖 currentDir