Bir dizine sembolik linkte / sonunda bir eğik çizgi eklemeli miyim?


30

Bir dizine bağlanma, ls -lI ln -s dirveya 'ya bağlı olarak farklı sonuçlar verir ln -s dir/. Ama gerçek fark nedir ve hangisini neden tercih etmeliyim?

Yanıtlar:


9

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 tarTabSpacelinktamamlanır ln -s target/ link.


Bağlantılı soru yollarda art arda gelen eğik çizgilerle ilgili gibi gözükse de, bağlantılar üzerindeki eğik çizgilerle ilgili değil. Burada söyleyecek bir şeyleri olduğundan emin değilim.
mwfearnley

Aslında bunu söylememeliydim. Soruyla yakından ilgili olan ortak bir kaygı hakkında söyleyecek çok şeyi var. Yine de bu sonuca varacağını sanmıyorum.
mwfearnley

@mwfearnley Bu mantıklı bir sonuçtur: eğer foo -> bar/öyleyse foo/quxeşittir bar//qux. Resmen konuşma olan sorunun başlığı içermese foo -> bar/de, cevabımdaki olayı da tartışıyorum.
Gilles 'SO- kötülük' dur

Merhaba, cevap verdiğiniz için teşekkürler .. Bana, sembolik bağlar dahil yolların eşdeğer olduğunu söylüyor. Bana, sembolik bağlantıya erişirsem (sondaki bir eğik çizgi olmadan) ve bir Unix uzmanı olmadan, “denklik” in ne anlama geldiğini ya da ne anlama geldiğini bilmiyorum.
mwfearnley

Bir fark yarattığı en az bir durum var, bu yüzden bu cevabı reddetmek zorunda kaldım.
Flimm

27

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.


3

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.


Ben de merak ediyorum eğer aslında bir fark yaratıyor, ama neden bu ek çizgi sonra saklanabilir ki?
Tobias Kienzler

2

Sorunuz gerçekten lsprogramı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 lskullanı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.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.