Pourquoi ln -s accepte-t-il un seul argument

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

S'agit-il d'un bogue lnou existe-t-il un cas d'utilisation pour créer un lien symbolique entre un fichier et lui-même?

C'est avec coreutils 8.21-1ubuntu5.1.

Squidly
la source

Réponses:

45

Ce n'est pas un bug. Le cas d'utilisation est lorsque vous souhaitez lier un fichier au même nom de base mais dans un répertoire différent:

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

Il est vrai que lorsque vous faites cela avec un nom de fichier qui se trouve dans le même répertoire, cela crée un lien vers lui-même qui ne fait pas beaucoup de bien!

Cela fonctionne que vous utilisiez des liens symboliques ou des liens durs.

Celada
la source
15
Une autre façon de le dire: ln -s /path/to/fileest l'abréviation de ln -s /path/to/file .. Comme lsc'est court pour ls ..
Stéphane Chazelas
3
@ StéphaneChazelas oui, et vous enregistrez deux frappes entières! :-)
Celada
4
Notez que ce comportement n'est pas spécifié par POSIX mais semble être assez courant (GNU, busybox, FreeBSD, Solaris, Ultrix au moins, et était déjà comme ça (bien que -s n'était pas supporté bien sûr) dans la première version d'Unix au début des années 70).
Stéphane Chazelas
9

Le moyen le plus simple de le découvrir est bien sûr de l'essayer et de le voir. Quand aucun 2ème argument n'est donné, lncréera un lien dans le répertoire courant avec le même nom que l'original:

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

Ceci est également expliqué dans man ln:

Dans le 2ème formulaire, créez un lien vers TARGET dans le répertoire courant.

La "2ème forme" fait référence à:

Dans [OPTION] ... CIBLE (2e forme)

terdon
la source