为什么ln -sf不会覆盖目录的现有链接

时间:2018-10-21 17:33:14

标签: linux gnu-coreutils ln

根据文档,命令ln -f删除现有的目标文件。这是否意味着如果我创建符号链接,-f应该删除覆盖目标位置上任何现有符号链接的内容吗?

我有一个符号链接,例如L,指向DIR1并键入ln -sf DIR2 L。但是L仍然指向DIR1。仅在rm L之后,此命令才会创建指向DIR2的链接。

通过符号链接到文件,它的行为符合预期。

指向目录的链接有什么问题? (在Ubuntu 16.04.2 LTS和Windows WSL上为bash 4.3.48)

1 个答案:

答案 0 :(得分:1)

运行时:

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选项。