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

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

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

>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

它实际上并没有失败。它创建了你的链接里面给定的目录:

% mkdir dir_1 dir_2
% ln -s dir_1 symlink_dir
% ln -s dir_2 symlink_dir
% ls -l
total 0
drwxr-xr-x 2 user group 60 Oct 16 12:47 dir_1
drwxr-xr-x 2 user group 40 Oct 16 12:47 dir_2
lrwxrwxrwx 1 user group  5 Oct 16 12:47 symlink_dir -> dir_1
% ls -l dir_1
total 0
lrwxrwxrwx 1 user group  5 Oct 16 12:47 dir_2 -> dir_2

手册页中描述了此行为:

 ln [OPTION]... TARGET... DIRECTORY     (3rd form)
 ...
 In the 3rd and 4th forms, create links to each TARGET in DIRECTORY.

但是,由于设置不正确,此链接无法链接回 dir_2。不过这也是预期行为,并不意味着会失败。从联机帮助页中:

符号链接可以保存任意文本;如果稍后解析,则相对链接将根据其父目录进行解释。

顺便说一句,即使使用 ,它对我来说也是一样的工作方式-sv。也许你正在使用 的不同实现ln。你确定你没有使用 吗-T?也许那是在你的~/.bashrc/ ~/.zshrc/etc 中设置的。试试which ln

相关内容