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

giZ*_*Zm0 7 linux command ln

运行时(在 linux 上不同的 ubuntu 变体):

>ln -s dir_1 symlink_dir
>ln -s dir_2 symlink_dir
Run Code Online (Sandbox Code Playgroud)

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

>ln -s file_1 symlinkg_file
>ln -s file_2 symlinkg_file
Run Code Online (Sandbox Code Playgroud)

或者

>ln -sv dir_1 symlink_dir
>ln -sv dir_2 symlink_dir
Run Code Online (Sandbox Code Playgroud)

它失败并显示错误消息:

ln: failed to create symbolic link
Run Code Online (Sandbox Code Playgroud)

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

Sté*_*las 14

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

symlink_dir/dir_2 -> dir_2
Run Code Online (Sandbox Code Playgroud)

符号链接

做一个:

ls -l symlink_dir/dir_2
Run Code Online (Sandbox Code Playgroud)

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

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

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