Por que ln -s aceita um único argumento

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

Isso é um bug lnou existe um caso de uso para vincular um arquivo a si mesmo?

Isso é com coreutils 8.21-1ubuntu5.1.

Squidly
fonte

Respostas:

45

Não é um bug. O caso de uso é para quando você deseja vincular um arquivo ao mesmo nome de base, mas em um diretório diferente:

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

É verdade que quando você faz isso com um nome de arquivo que está no mesmo diretório, ele cria um link para si mesmo, o que não faz muito bem!

Isso funciona independentemente de você usar links simbólicos ou links físicos.

Celada
fonte
15
Outra maneira de dizer: ln -s /path/to/fileé a abreviação de ln -s /path/to/file .. Como lsé curto ls ..
Stéphane Chazelas
3
@ StéphaneChazelas sim, e você salva duas teclas inteiras! :-)
Celada
4
Observe que esse comportamento não é especificado pelo POSIX, mas parece ser bastante comum (GNU, busybox, FreeBSD, Solaris, Ultrix, pelo menos, e já era assim (embora -s não seja suportado, é claro) na primeira versão do Unix no início dos anos 70).
Stéphane Chazelas
9

A maneira mais fácil de descobrir, é claro, é tentar e ver. Quando nenhum segundo argumento for fornecido, lncriará um link no diretório atual com o mesmo nome que o original:

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

Isso também é explicado em man ln:

No segundo formulário, crie um link para TARGET no diretório atual.

O "2º formulário" refere-se a:

Em [OPÇÃO] ... ALVO (2º formulário)

terdon
fonte