Mengapa ln -s menerima satu argumen

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

Apakah ini bug di dalam lnatau ada kasus penggunaan untuk menghubungkan file dengan dirinya sendiri?

Ini dengan coreutils 8.21-1ubuntu5.1.

Squidly
sumber

Jawaban:

45

Itu bukan bug. Kasus penggunaan adalah ketika Anda ingin menautkan file ke nama samaran yang sama tetapi di direktori yang berbeda:

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

Memang benar bahwa ketika Anda melakukan ini dengan nama file yang ada di direktori yang sama itu membuat tautan ke dirinya sendiri yang tidak melakukan banyak hal baik!

Ini berfungsi terlepas dari apakah Anda menggunakan symlink atau tautan keras.

Celada
sumber
15
Cara lain untuk menjelaskannya: ln -s /path/to/fileadalah kependekan dari ln -s /path/to/file .. Suka lsadalah kependekan dari ls ..
Stéphane Chazelas
3
@ StéphaneChazelas ya, dan Anda menyimpan dua penekanan tombol! :-)
Celada
4
Perhatikan bahwa perilaku itu tidak ditentukan oleh POSIX tetapi tampaknya cukup umum (GNU, busybox, FreeBSD, Solaris, Ultrix setidaknya, dan sudah seperti itu (meskipun -s tidak didukung tentu saja) di versi pertama Unix di awal 70an).
Stéphane Chazelas
9

Cara termudah untuk mengetahui tentu saja, adalah dengan mencobanya dan melihatnya. Ketika tidak ada argumen ke-2 yang diberikan, lnakan membuat tautan di direktori saat ini dengan nama yang sama seperti aslinya:

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

Ini juga dijelaskan dalam man ln:

Di formulir ke-2, buat tautan ke TARGET di direktori saat ini.

"Formulir ke-2" mengacu pada:

Di [OPSI] ... TARGET (formulir ke-2)

terdon
sumber