为什么 ln -s 在创建到现有符号链接目录的符号链接时不告诉它失败?

为什么 ln -s 在创建到现有符号链接目录的符号链接时不告诉它失败?

运行时(在不同的 ubuntu 版本的 linux 上):

>ln -s dir_1 symlink_dir
>ln -s dir_2 symlink_dir

它失败了而不告诉它失败了。但是,如果您对文件执行相同的操作,或者将 v 添加到选项中,它确实会告诉您失败:

>ln -s file_1 symlinkg_file
>ln -s file_2 symlinkg_file

或者

>ln -sv dir_1 symlink_dir
>ln -sv dir_2 symlink_dir

它失败并显示错误消息:

ln: failed to create symbolic link

对我来说这似乎是一个非常奇怪的行为?是否有一个原因?

答案1

因为在第二个过程中ln它不会失败,它会创建一个

symlink_dir/dir_2 -> dir_2

符号链接

做一个:

ls -l symlink_dir/dir_2

你会在那里看到一个(可能损坏的)符号链接。

ln如果目标是目录(或目录的符号链接),这就是工作方式。

第三个ln可能会失败,因为已经有dir_2内部symlink_dir(又名dir_2)。

答案2

根据需要,指定-n将使ln第二个命令失败:

$ ln -ns realdir symdir
$ ln -ns realdir symdir
ln: creating symbolic link `symdir' to `realdir': File exists

请注意,这-v当然与结果无关。

答案3

您可以看到发生了什么并通过ln选项实现所需的行为。使用此别名ln

alias ln='\ln -vsn'

ln选项:

   -v, --verbose
          print name of each linked file
   -s, --symbolic
          make symbolic links instead of hard links
   -n, --no-dereference
          treat destination that is a symlink to a directory as if it were a normal file

相关内容