Warum akzeptiert ln -s ein einzelnes Argument?

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

Ist dies ein Fehler lnoder gibt es einen Anwendungsfall, um eine Datei mit sich selbst zu verknüpfen?

Das ist mit coreutils 8.21-1ubuntu5.1.

Tintenfisch
quelle

Antworten:

45

Es ist kein Fehler. Der Anwendungsfall ist, wenn Sie eine Datei mit demselben Basisnamen, jedoch in einem anderen Verzeichnis verknüpfen möchten:

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

Es ist wahr, wenn Sie dies mit einem Dateinamen tun, der sich im selben Verzeichnis befindet, wird ein Link zu sich selbst erstellt, der nicht viel Gutes bewirkt!

Dies funktioniert unabhängig davon, ob Sie Symlinks oder Hardlinks verwenden.

Celada
quelle
15
Eine andere Art, es auszudrücken: ln -s /path/to/fileist eine Abkürzung für ln -s /path/to/file .. Wie lsist die Abkürzung für ls ..
Stéphane Chazelas
3
@StéphaneChazelas ja, und du sparst zwei ganze Tastenanschläge! :-)
Celada
4
Beachten Sie, dass dieses Verhalten nicht von POSIX spezifiziert wird, sondern ziemlich verbreitet zu sein scheint (zumindest GNU, busybox, FreeBSD, Solaris, Ultrix) und bereits in der ersten Version von Unix so war (obwohl -s natürlich nicht unterstützt wurde) Anfang der 70er Jahre).
Stéphane Chazelas
9

Der einfachste Weg, das herauszufinden, ist natürlich, es auszuprobieren und zu sehen. Wenn kein zweites Argument angegeben wird, lnwird im aktuellen Verzeichnis ein Link mit demselben Namen wie das Original erstellt:

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

Dies wird auch erklärt in man ln:

Erstellen Sie im 2. Formular einen Link zu TARGET im aktuellen Verzeichnis.

Die "2. Form" bezieht sich auf:

In [OPTION] ... ZIEL (2. Form)

terdon
quelle