Menghubungkan ke suatu direktori memberikan hasil yang berbeda dengan ls -l
bergantung pada apakah saya ln -s dir
atau ln -s dir/
. Tetapi apa perbedaan yang sebenarnya, dan mana yang harus saya pilih mengapa?
Menghubungkan ke suatu direktori memberikan hasil yang berbeda dengan ls -l
bergantung pada apakah saya ln -s dir
atau ln -s dir/
. Tetapi apa perbedaan yang sebenarnya, dan mana yang harus saya pilih mengapa?
Jawaban:
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 tar
TabSpacelink
selesai ln -s target/ link
.
foo -> bar/
kemudian foo/qux
setara dengan bar//qux
. Sementara judul pertanyaan, secara formal, tidak termasuk foo -> bar/
, saya juga membahas kasus itu dalam jawaban saya di sana.
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.
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.
Pertanyaan Anda sebenarnya tentang perilaku ls
program.
1) Jika Anda melakukan di ls -l $dir
mana $ dir sebenarnya adalah symlink, Anda mendapatkan informasi tentang symlink.
2) Jika Anda melakukan di ls -lL $dir
mana $ 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 ls
sedang 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.