无法覆盖符号链接 RedHat Linux

发布于 2024-10-21 08:40:11 字数 241 浏览 2 评论 0原文

我创建了一个符号链接:

sudo ln -s /some/dir new_dir

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

sudo ln -f -s /other/dir new_dir

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

I have created a symbolic link:

sudo ln -s /some/dir new_dir

Now I want to overwrite the symbolic link to point to a new location and it will not overwrite. I have tried:

sudo ln -f -s /other/dir new_dir

I can always sudo rm new_dir, but I would rather have it overwrite accordingly if possible. Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

戏蝶舞 2024-10-28 08:40:11
ln -sfn /other/dir new_dir

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

ln -sfn /other/dir new_dir

works for me. The -n doesn't dereference the destination symlink.

水中月 2024-10-28 08:40:11

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

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

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

这样你就会覆盖它。

You can create it and then move it:

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

edit: Missing -Tf, to treat the directory as a regular file and don't prompt for overwrite.

This way you will overwrite it.

请持续率性 2024-10-28 08:40:11

由于 mikeytown2s 评论中的链接已损坏,我将解释为什么 redent84s 答案 更好:

虽然

ln -sfn newDir currentDir

可以完成工作,它不是一个原子操作,正如您使用 strace 所看到的:

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

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

为了防止错误,请改用:

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

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

Since the Link from mikeytown2s comment is broken, i will explain why redent84s answer is better:

While

ln -sfn newDir currentDir

does the job, it is not an atomic operation, as you can see with strace:

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

This is important when you have a webserver root pointing to that symlink. It could cause errors while the symlink is deleted and created again - even in the timespan of a microsecond.

To prevent errors use instead:

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

This will create a temporary Link and after that overwrite currentDir in an atomic operation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文