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

Squ*_*dly 30 coreutils symlink ln

> cd /tmp
> ln -s foo
> ls -alhF /tmp
lrwxrwxrwx 1 user user    3 Jul 29 14:00 foo -> foo
Run Code Online (Sandbox Code Playgroud)

这是一个错误ln还是有一个将文件符号链接到自身的用例?

这是与coreutils 8.21-1ubuntu5.1.

Cel*_*ada 47

这不是一个错误。用例是当您要将文件链接到相同的基本名称但位于不同的目录中时:

cd /tmp
ln -s /etc/passwd
ls -l passwd
lrwxrwxrwx 1 xxx xxx 11 Jul 29 09:10 passwd -> /etc/passwd
Run Code Online (Sandbox Code Playgroud)

确实,当您使用同一目录中的文件名执行此操作时,它会创建一个指向自身的链接,这并没有什么好处!

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

  • 另一种说法:`ln -s /path/to/file` 是`ln -s /path/to/file .` 的缩写。就像 `ls` 是 `ls .` 的缩写。 (16认同)
  • 请注意,该行为不是由 POSIX 指定的,但似乎相当普遍(至少是 GNU、busybox、FreeBSD、Solaris、Ultrix,并且在 Unix 的第一个版本中已经如此(尽管 -s 不受支持) 70 年代初)。 (4认同)
  • @StéphaneChazelas 是的,您可以节省两次整个按键!:-) (3认同)

ter*_*don 9

当然,找出答案的最简单方法是尝试并查看。当没有给出第二个参数时,ln将在当前目录中创建一个与原始目录同名的链接:

$ ln -s /etc
$ ls -l
lrwxrwxrwx 1 terdon terdon         4 Jul 29 16:09 etc -> /etc
Run Code Online (Sandbox Code Playgroud)

这也在man ln

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

“第二种形式”是指:

ln [选项]... 目标(第二种形式)