为什么ln -s接受一个参数


27
> cd /tmp
> ln -s foo
> ls -alhF /tmp
lrwxrwxrwx 1 user user    3 Jul 29 14:00 foo -> foo

这是bug ln还是存在将文件符号链接到自身的用例?

这是与coreutils 8.21-1ubuntu5.1

Answers:


45

这不是错误。用例适用于要将文件链接到相同的基本名称但在不同目录中的情况:

cd /tmp
ln -s /etc/passwd
ls -l passwd
lrwxrwxrwx 1 xxx xxx 11 Jul 29 09:10 passwd -> /etc/passwd

的确,当您使用同一目录中的文件名执行此操作时,它会创建指向自身的链接,这并不会带来很多好处!

无论您使用符号链接还是硬链接,此方法都有效。


15
另一种说法是:ln -s /path/to/file的缩写ln -s /path/to/file .。Like ls是的缩写ls .
斯特凡Chazelas

3
@StéphaneChazelas是的,您节省了两次按键!:-)
Celada

4
请注意,该行为不是POSIX所指定的,而是相当普遍的(至少是GNU,busybox,FreeBSD,Solaris,Ultrix),并且在Unix的第一个版本中已经是这样(尽管当然不支持-s)。在70年代初)。
斯特凡Chazelas

9

找出不正确的最简单方法是尝试一下然后看看。如果没有给出第二个参数,ln将在当前目录中创建一个与原始目录同名的链接:

$ ln -s /etc
$ ls -l
lrwxrwxrwx 1 terdon terdon         4 Jul 29 16:09 etc -> /etc

man ln以下内容中也对此进行了说明:

在第二形式中,在当前目录中创建指向TARGET的链接。

“第二形式”是指:

ln [OPTION] ... TARGET(第二种形式)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.