为什么 ln -sf 不覆盖现有 link 到目录

Why ln -sf does not overwrite existing link to directory

根据文档,命令 ln -f 删除现有的目标文件。这是否意味着如果我创建一个 symlink,-f 应该删除或覆盖目标处的任何现有 symlink?

我有一个 symlink,比如 L,指向 DIR1 并键入 ln -sf DIR2 L。但是 L 仍然指向 DIR1。仅在 rm L 之后此命令创建一个指向 DIR2 的 link。

使用 symlinks 到 files 它的行为符合预期。

link 到 目录 有什么问题? (bash 4.3.48 在 Ubuntu 16.04.2 LTS 和 Windows WSL 上)

当你运行:

ln -sf DIR2 L

这是在 DIR1 中创建一个符号链接,因为 L 指向 DIR1 并且 ln 取消引用它,创建 L/DIR2 -> DIR1

以下:

rm -fr DIR1 DIR2 L
mkdir DIR1 DIR2
ln -v -s DIR1 L
ls -la L
ln -v -f -s DIR2 L
ls -la L

将输出:

'L' -> 'DIR1'
lrwxrwxrwx 1 runner runner 4 Oct 21 18:13 L -> DIR1
'L/DIR2' -> 'DIR2'
lrwxrwxrwx 1 runner runner 4 Oct 21 18:13 L -> DIR1

要处理该问题,请使用 answer in this thread on superuser.com 中指示的 --no-dereference 选项。