Linux'ta göreceli bir sembolik bağ nasıl oluşturabilirim?


Yanıtlar:


77
  1. Bağlantının yerleşmesini istediğiniz dizine gidin.
  2. Komutu çalıştırın ln -s ../some/other/file linkname

Sağladığınız yol dosyada saklanır. Dosyaya eriştiğinizde, depolanan yol dosyaya göre aranır ve genişletilir. Bağlantıyı oluştururken hangi dizinde bulunduğunuzu bilmiyor.


23
Hayır yapmazsın. Geçerli dizininiz yerine bağlantı adına göre konum belirttiğinizden emin olmanız gerekir.
Ignacio Vazquez-Abrams

5
Anlamaya yardımcı olmak için: Sağladığınız yol dosyada saklanır. Dosyaya eriştiğinizde, depolanan yol dosyaya göre aranır ve genişletilir. Bağlantıyı oluştururken hangi dizinde bulunduğunuzu bilmiyor.
Marian,

2
Tam olarak eşdeğeri:ln -s ../some/other/file /some/dir/linkname
sehe

1
Bir dizine aşağı yukarı gitmek yerine tekrar yukarı gitmek yerine geçerli dizine başvurduğundan ln -s ./file linknameberi yapabilirsiniz ..
pduersteler

1
ln -s somedir/original-dir link-nameçalışmıyor. link-nameGeçersiz bir bağlantı içeren adı olan bir dizin oluşturur . ln -sr somedir/original-dir link-name
Lorenz Meyer

28

GNU coreutils 'in (> = 8.16)' nın son sürümleri --relative(veya -r) seçeneğini desteklemektedir, bu da ln -s2 mutlak veya göreceli (çalışma dizininize göre) yollarını arayabileceğiniz anlamına gelir ve olması gereken doğru göreli yolu bulacaktır. sembolik linke yazılmış.


2
Teşekkürler. Bu -rseçenek, çapraz derleme yaptığınızda ve yapı ana bilgisayarında mutlak yollara, ancak hedef üzerindeki bağıntılı yollara gereksinim duyduğunuzda yararlıdır.
Robert Calhoun

rdfind, yalnızca mutlak olmayan, aynı zamanda hiçbir sebep olmadan dizinleri geri çeken bazı kötü sembolik bağlar üretebilir. ln -r -s targetfile myaliasdüzeltmenize yardımcı olabilir
Ray Foss

2

Anlamanız gereken şey, temelde bir linkin bir dosyayı içeren bir dizin girişinden çok bir metin dosyası gibi olmasıdır. Öyleyse sen

echo ../poo >/file/name

o zaman bu oldukça benzer

ln -s ../poo /file/name

Sistemin var olup olmadığını umursamıyor /file/../poo, sadece sembolik bağlantıya sokulmuş bir metin parçası. Bir şey sembolik bağlantıyı açmaya çalıştığında , sistem bunu çözmeye çalışır.

Dosya adı tamamlama özelliğine sahip bir kabuk kullanıyorsanız, bu özellik mevcut çalışma dizininize göre bir dosya adını tamamlamanıza izin vererek, daha sonra tamamen başka bir dizinde bir bağlantı bağlantısının hedefi olarak kullanmanıza rağmen bunları karıştırabilir.


Bu, bazı sistem çağrıları tarafından kötüye kullanılır - örneğin BSD'nin , sistemin bellek ayırma şeklini değiştirmek için belirli bir sistem dosyasını işaretlemenize olanak tanımak için kullanıldığını biliyorum <. Elbette <, bu dizinde isimlendirilmiş bir dosya yok , sadece o platformdaki normal bir metin dosyası üzerinde çekici özelliklere sahip çok küçük bir dosya benzeri şey yaratmanın ucuz bir yolu.
üçlü

Bu bağlantı şimdi öldü. Man.openbsd.org/OpenBSD-5.3/man5/malloc.conf.5 adresini deneyin, ancak OpenBSD'nin daha yeni sürümlerindeki davranışların çok daha az renkli olduğunu görün.
üçlü

0

Göreceli bağlantılar benim için OS X'te zordu, yani

~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin ~/bin
~/Dropbox/git/dave-bot $ ln -s ../codyhess/bin/ ~/bin

ikisi de işe yaramadı (bir şey yaratıldı ama bir dizin değildi). İstenilen bağlantıyı mutlak yollar kullanarak oluşturdum .

~/Dropbox/git/dave-bot $ ln -s ~/Dropbox/git/codyhess/bin/ ~/bin

Uygulanabilir bir çözüm olduğundan yorum yapmak zorunda değilsiniz. Bu ayrı bir cevap olarak kalabilir.
slhck

1
Göreceli bağlantılarla ilk denemeniz sadece düz yanlış ve bu yüzden işe yaramadı. Göreceli bağlantıların nasıl çalıştığını yanlış anladınız. Bu konuda özellikle aldatıcı bir şey yok (OS X kullanıyor olsanız bile). Belki de bağlantıyı oluştururken çalışma dizininizi değiştirmekten bahseden diğer cevapları yanlış yönlendirdiniz. Bu sadece bağlantıyı doğru yapmayı kolaylaştırmaktı ve hiçbir şekilde gerekli değildir. Göreceli yolu geçerli dizine göre değil, linkin dizinine göre tanımlarsınız. Sonra ne oldu:ln -s Dropbox/git/codyhess/bin ~/bin
Timo

Ayrıca birileri özellikle hangi dünyada göreceli bağların nasıl oluşturulacağını sorduğunda, mutlak bağları yapabileceğinizi söyleyen bir "uygun çözüm" mü oluşturuyor? Özellikle OP'lerin sorusuna cevap vermiyor ve bu nedenle çözümün tam tersi, çözüm değil. Bu bir yorum ya da cevap olmamalı, “Bağıl bağlantılar tam olarak nasıl çalışıyor? Umarım bu mac kullanıcısı şimdi yeterince açıklamıştır. :)
Timo

@TimoLehto Belki asıl yazara yorum yapmak istersiniz (Cody Hess). Ben sadece yazıyı kopyaladım.
slhck

@slhck, size yönlendirdim, çünkü çözümü "uygun" olarak kabul ettiniz ve yorumunuz, biri cevabı "cevap değil" olarak işaretlemek istiyorsa ikna edecek kişi olacağınızı düşündürdü (ve işaretleme kabul edildi).
Timo

0

Göreceli yolları kullanarak bir sembolik bağlantının nasıl oluşturulacağını daha detaylı açıklamak istedim (detaylı bir örnekle).

Ignacio Vazquez-Abrams yorumlarda belirtildiği gibi, geçerli dizininize göre değil, linkin oluşturulacağı yere göre dosya / klasör konumunu belirtmelisiniz.

ÖRNEK

Sen içindedir /usr/share/nginx/html/_src/learn Bir sembolik yaratacak codingiçinde/usr/share/nginx/html

Bağıl sembolik bağlantı (teori) oluşturun:

sudo ln -s /path/to/source/file-or-folder/relative/from/symlink /path/to/symlink/relative/to/current/location

Gerçek bağıl sembolik bağlantı oluşturun:

sudo ln -s ./_src/learn/coding ../../coding

Daha fazla bilgi (aynı örnek)

current path:                                  /usr/share/nginx/html/_src/learn
symlink(to be) relative to current path:       ../../coding                 
symlink location (absolute):                   /usr/share/nginx/html/coding
folder/file relative to symlink location:      ./_src/learn/coding
folder/file absolute path:                     /usr/share/nginx/html/_src/learn/coding  
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.