Bir dizine bağlanma, ls -l
I ln -s dir
veya 'ya bağlı olarak farklı sonuçlar verir ln -s dir/
. Ama gerçek fark nedir ve hangisini neden tercih etmeliyim?
Bir dizine bağlanma, ls -l
I ln -s dir
veya 'ya bağlı olarak farklı sonuçlar verir ln -s dir/
. Ama gerçek fark nedir ve hangisini neden tercih etmeliyim?
Yanıtlar:
Fark yok. (Hedef mevcut bir dizin olmasaydı fark olurdu.)
Son eğik çizgi kabuk tamamlama nedeniyle orada bitmiş olabilir: bazı yapılandırmalarla, ln -s tar
TabSpacelink
tamamlanır ln -s target/ link
.
foo -> bar/
öyleyse foo/qux
eşittir bar//qux
. Resmen konuşma olan sorunun başlığı içermese foo -> bar/
de, cevabımdaki olayı da tartışıyorum.
Aklıma gelen tek şey, sizi dizini silip bir dosya oluştururken sizi “koruduğu”.
[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]$
Eğik çizgili sürüm, hedef bir dosyayla değiştirildiğinde kopar.
Ara soru Küçük testler yaptım:
$ 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
Gördüğünüz gibi, sistem çağrıları sayısında bir fark yoktur (en azından ls için) ve izler birbirine çok benziyor. Bununla birlikte, bu sadece çöplük testi ve emin değilim - bazı farklılıklar olabilir.
Sorunuz gerçekten ls
programın davranışlarıyla ilgili .
1) Eğer ls -l $dir
$ dir 'nin aslında bir sembolik link olduğunu yaparsanız sembolik link hakkında bilgi sahibi olursunuz.
2) ls -lL $dir
$ dir'nin bir dizine bağlantı olduğu durumlarda, hedef dizin hakkında bilgi alırsınız.
3) Bunu yaparsanız ls -l $dir/.
, sembolik çizgiyi takip etmeye zorlar ve hedef dizin hakkında bilgi verir.
4) Yaparsanız ls -l $dir/
, sonuçlar # 1 ile aynı olabilir veya hangi sürümün ls
kullanıldığına bağlı olarak # 3 ile aynı olabilir . Solaris'in eski bir versiyonuna # 1 gibi yapıyordum ve Linux'un # 3 gibi yapmasına şaşırdım.
ve hangisini neden tercih etmeliyim?
Eğer bir dizinin ismininin bir dizine bağdaştırılması yerine gerçek bir dizin olup olmadığından endişeleniyorsanız, eğik çizgi olmadan.
Dizinin kendisi yerine dizindeki dosyalar hakkında daha fazla endişeleniyorsanız izleyen eğik çizgi ile.