Yerleştirildiği dizine göre çözülen bir bağlantıya ihtiyacım var . Böyle bir şey oluşturmak için hangi komut kullanılır?
Yerleştirildiği dizine göre çözülen bir bağlantıya ihtiyacım var . Böyle bir şey oluşturmak için hangi komut kullanılır?
Yanıtlar:
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.
ln -s ../some/other/file /some/dir/linkname
ln -s ./file linkname
beri yapabilirsiniz .
.
ln -s somedir/original-dir link-name
çalışmıyor. link-name
Geçersiz bir bağlantı içeren adı olan bir dizin oluşturur . ln -sr somedir/original-dir link-name
GNU coreutils 'in (> = 8.16)' nın son sürümleri --relative
(veya -r
) seçeneğini desteklemektedir, bu da ln -s
2 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ış.
-r
seç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.
ln -r -s targetfile myalias
düzeltmenize yardımcı olabilir
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.
<
. 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.
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
ln -s Dropbox/git/codyhess/bin ~/bin
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 coding
iç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