为什么 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
选项。
根据文档,命令 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
选项。