运行时(在不同的 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