2016-04-01 25 views
-1

Sorunumu ekran görüntüleri aracılığıyla göstereyim. This is my first terminal. Bağlantıyı başka bir terminalden terminal2 olarak değiştirdim. Sorunum this ekran görüntüsünde vurgulanır. Bağlantıyı test2'ye değiştirdikten sonra ls test1 klasörünün içeriğini döndürür.Lincon'da sembolik bağın değiştirilmesi

+2

Sorun yok. Beklenen davranış budur. –

+0

Ancak, ls, test1'deki dosyaları döndürdükten sonra, bağlantıyı test2'ye değiştirdim. Bu davranış bekleniyor mu? – shafeeq

+0

Bağlantıyı test2'ye değiştirdiğiniz komutu görmüyorum (ln -sf test2 testi gibi bir şey olurdu). "readlink" bağlantıları oluşturmuyor. – chthonicdaemon

cevap

2

Sizi kafanıza sokan şey, pwd yerleşkesinin aslında geçerli çalışma dizinini anlatmamasıdır - size şu anki çalışma dizinine alıştığınız yolu bildirir.

$ pwd -P 

/home/darkknight/test1 gibi bir şey verecektir:

gerçek Geçerli çalışma dizini istiyorsanız

, sen -P bayrağı gerekir.

+0

Teşekkür ederim, pwd'nin -P seçeneği benim için yeni bilgilerdi. – shafeeq

1

readlink ikinci çağrı Eğer kılavuz sayfasında readlink açıklaması standart çıkışa

bir sembolik bağın

Görüntüleme değeri

[email protected]:~/test$ readlink \`pwd`/home/darkknight/test2` 

olduğunu düşünüyorum yapmaz Yani

readlink salt okunur bir işlemdir. Ayrıca, $? değerini sıfırdan sonra sıfır değerine de sahip olacaksınız, bu, test2 bir sembolik bağlantı olmadığı için başarısız oldu.

(-f kuvvet anlamına gelir) ln -s -f başka bir çağrı ile değiştirin ...

[email protected]:~$ ln -s -f test2 test 

Tüm dağıtımlar -f onur böylece ilk sembolik kaldırmanız gerekebilir:

[email protected]:~$ rm test; ln -s test1 test 
+0

Bazı biçimlendirme sorunları vardı. Lütfen soruyu bir kez daha gözden geçirin. – shafeeq

+0

Teşekkür ederim, ama öncekini sildikten sonra sembolik bağlantıyı değiştirdim. ama sorun hala var. – shafeeq

+0

Tüm kanıtlar, sembolik bağlantıyı değiştirmediğinizi gösterir. 1. kızarmada hala sorunuz, "readlink" in sembolünü değiştirdiğine inanıyor. Birden fazla terminal kullanmaya gerek yoktur. "readlink" işlevini, durumu daha net bir şekilde gösteren ls -l 'ile değiştirmenizi öneririm. –

1

Şimdi bağlantıyı başka bir terminalden değiştirerek değiştiriyorum: komut

+0

ama yine de davranışları aynı. – shafeeq

+0

Hayır öyle değil. 'cd testi' vermediniz ve bu nedenle 'test1' klasöründe sıkışıp kaldınız ve şu anda bu yıldız kapısından geçmediniz, bu ** şimdi ** 'readlink' komutu doğru olarak raporlandığında test2 'klasörüne yönlendirecektir. Lütfen cevabımı kabul etmeyi düşünün, bu benim müthiş yardımcı olur. –

+0

Bu, – shafeeq

1

Açıkladığınız şey beklenen davranış. size cd test zaman aslında test1 girmek olduğunu

$ mkdir test1 
$ mkdir test2 
$ touch test1/t1 
$ touch test2/t2 
$ ln -s test1 test 
$ cd test 
$ ls 
t1 
$ rm ../test 
$ ln -s test2 ../test 
$ readlink ../test 
test2 
$ ls 
t1 
$ 

Basitçe düşünün. Ardından, sembolik bağlantıyı test neyi istediğiniz gibi değiştirebilir ve hatta silebilirsiniz - hala test1. Elbette

$ pwd 
test 
$ readlink `pwd` 
test2 
$ 

, readlink döner test2, gider ve test2 olarak değiştirildi akım test linki okundu olarak. Ancak test içine zaman size cd de , bağlantı test1 için oldu. Ve hala test1 dizinde bulunuyorsunuz.

Elbette, şimdi test dizinine geçerseniz, test2 içinde olursunuz.

$ cd ../test 
$ ls 
t2 
$ 

Netleştirmek için son bir şey. testDizini mevcut değil. Bu dizine giremez ve giremezsiniz. Ne zaman cd test, test sembolik bağlantıyı şu an için (burada test1) işaret eder.

test1 dizini girdikten sonra, test sembolik bağlantısını istediğiniz gibi değiştirebilirsiniz, yine de test1 içinde olacaksınız.

+0

ama 'readlink 'komutu yeni dizini döndürür. Benim sorumda gösteriliyor. – shafeeq