Haruskah saya menyertakan trailing slash / di symlink ke direktori?

30

Menghubungkan ke suatu direktori memberikan hasil yang berbeda dengan ls -lbergantung pada apakah saya ln -s diratau ln -s dir/. Tetapi apa perbedaan yang sebenarnya, dan mana yang harus saya pilih mengapa?

Tobias Kienzler
sumber

Jawaban:

9

Tidak ada perbedaan. (Akan ada perbedaan jika target itu bukan direktori yang ada.)

Slash terakhir mungkin berakhir di sana karena penyelesaian shell: dengan beberapa konfigurasi, ln -s tarTabSpacelinkselesai ln -s target/ link.

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Pertanyaan yang ditautkan tampaknya tentang beberapa garis miring berturut-turut, tetapi bukan tentang garis miring pada tautan. Saya tidak yakin ada yang ingin saya katakan di sini.
mwfearnley
Sebenarnya, saya seharusnya tidak mengatakan itu. Ini memiliki sedikit untuk dikatakan, pada masalah umum yang terkait erat dengan pertanyaan. Saya tidak berpikir itu mengarah sampai ke kesimpulan ini.
mwfearnley
@ mwfearnley Ini konsekuensi logis: jika foo -> bar/kemudian foo/quxsetara dengan bar//qux. Sementara judul pertanyaan, secara formal, tidak termasuk foo -> bar/, saya juga membahas kasus itu dalam jawaban saya di sana.
Gilles 'SANGAT berhenti menjadi jahat'
Hai, terima kasih telah merespons .. Ini memberi tahu saya bahwa jalur termasuk symlink adalah sama. Itu tidak selalu memberi tahu saya apa yang terjadi jika saya mengakses symlink itu sendiri (tanpa garis miring), dan tanpa menjadi ahli Unix, saya tidak perlu tahu apa arti 'setara' atau tidak berarti.
mwfearnley
Setidaknya ada satu kasus tepi di mana itu membuat perbedaan, jadi saya harus menurunkan jawaban ini.
Flimm
27

Satu-satunya hal yang dapat saya pikirkan adalah bahwa ia "melindungi" Anda dari seseorang yang menghapus direktori dan membuat file.

[user@host linktest]$ mkdir test
[user@host linktest]$ ln -s test/ slash
[user@host linktest]$ ln -s test noslash
[user@host linktest]$ ls -l
total 4
lrwxrwxrwx 1 paul paul    4 Feb 21 21:00 noslash -> test
lrwxrwxrwx 1 paul paul    5 Feb 21 21:00 slash -> test/
drwxrwxr-x 2 paul paul 4096 Feb 21 20:59 test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: symbolic link to `test/'
[user@host linktest]$ rmdir test
[user@host linktest]$ file *slash
noslash: broken symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$ touch test
[user@host linktest]$ file *slash
noslash: symbolic link to `test'
slash: broken symbolic link to `test/'
[user@host linktest]$

Versi dengan garis miring pecah ketika target diganti dengan file.

developmentalinsanity
sumber
3

Pertanyaan menarik. Saya telah membuat tes kecil:

$ mkdir dir
$ ln -s dir/ test_slash
$ ln -s dir test_noslash
$ ls -l
total 4
drwxr-xr-x 2 vrusinov vrusinov 4096 Feb 21 16:41 dir
lrwxrwxrwx 1 vrusinov vrusinov    3 Feb 21 16:41 test_noslash -> dir
lrwxrwxrwx 1 vrusinov vrusinov    4 Feb 21 16:41 test_slash -> dir/
$ strace ls test_slash 2> trace_slash
$ strace ls test_noslash 2> trace_noslash
$ wc -l trace_*
   79 trace_noslash
   79 trace_slash
$ diff -u trace_* | less

Seperti yang Anda lihat, tidak ada perbedaan dalam jumlah panggilan sistem (setidaknya untuk ls) dan jejak terlihat sangat mirip. Namun, ini hanya tes dump dan saya tidak yakin - mungkin ada beberapa perbedaan.

rvs
sumber
Saya juga bertanya-tanya apakah itu benar-benar membuat perbedaan, tetapi mengapa slash tambahan itu disimpan?
Tobias Kienzler
2

Pertanyaan Anda sebenarnya tentang perilaku lsprogram.

1) Jika Anda melakukan di ls -l $dirmana $ dir sebenarnya adalah symlink, Anda mendapatkan informasi tentang symlink.

2) Jika Anda melakukan di ls -lL $dirmana $ dir adalah symlink ke direktori, Anda mendapatkan informasi tentang direktori target.

3) Jika Anda melakukannya ls -l $dir/. , symlink harus diikuti dan memberikan informasi tentang direktori target.

4) Jika ya ls -l $dir/, hasilnya mungkin sama dengan # 1 atau mungkin sama dengan # 3 tergantung pada versi mana yang lssedang digunakan. Saya sudah terbiasa dengan versi lama Solaris yang melakukannya seperti # 1 dan terkejut oleh Linux yang melakukannya seperti # 3.

dan mana yang harus saya pilih mengapa?

Tanpa trailing slash jika Anda mungkin khawatir apakah nama direktori give adalah direktori aktual versus symlink ke direktori.

Dengan trailing slash jika Anda lebih peduli tentang file dalam direktori daripada direktori itu sendiri.

Joe Inwap
sumber