`ln --no-dereference` 应该做什么?

`ln --no-dereference` 应该做什么?

我正在刷新对一些基本 GNU/Linux 命令的理解,我承认在过去 20 多年里我从未真正完全理解这些命令。

$ man ln部分说:

-n, --no-dereference
          treat LINK_NAME as a normal file if it is a symbolic link to a directory

为了更好地理解这一点,我将其分解如下:

$ mkdir dir1
$ ln -vs dir1 dir2
'dir2' -> 'dir1'
$ mkdir dir3; touch dir3/xx

$ tree -F
.  
├── dir1/  
├── dir2 -> dir1/  
└── dir3/  
    └── xx  

# Now to test -n, first as a hard link
$ ln -vn dir3/xx dir2
ln: failed to create hard link 'dir2': File exists

# and second as a symbolic link
$ ln -vsn dir3/xx dir2
ln: failed to create symbolic link 'dir2': File exists

# ??? why do these both fail ???

只有概要中的第一个命令形式调用“LINK_NAME”,语法如下:

   ln [OPTION]... [-T] TARGET LINK_NAME

所以这表示-n--no-dereference选项仅有的与 , 的第一个命令形式相关ln(而不是其他三个命令形式)。

在我的例子中:

目标dir3/xx
并且LINK_NAMEdir2('目录的符号链接')。

手册上说如果LINK_NAME即记住这是我们要创建的链接的名称) 是 '目录的符号链接'...

...那么我们应该将此符号链接视为“普通文件'。

我缺少什么?

答案1

如果没有-n,您的两个ln命令都会在 内部创建链接dir2:如果LINK_NAME存在并且是目录或目录的符号链接,则在目录内部创建链接(如果可能)。

这就是-n这里的变化:ln不会被视为LINK_NAME目录(如果它是符号链接)。由于LINK_NAME已经存在,ln失败。添加-f将导致现有的符号链接被替换:

ln -nsf dir3 dir2

将替换dir2而不是在内部创建链接dir2

相关内容