- Konu sahibi
- #1
Kısa cevap
Sembolik bağlantı, başka bir dosya veya dizinin yolunu gösteren ayrı bir dosyadır. Sabit bağlantı ise aynı dosya içeriğine ve inode'a açılan ikinci bir dizin girdisidir. Hedef yeniden adlandırıldığında veya silindiğinde sembolik bağlantı bozulabilir; sabit bağlantıların diğer adları, aynı inode üzerinde en az bir bağlantı kaldığı sürece çalışmaya devam eder.
Nasıl çalışırlar?
Linux dosya sistemlerinde dosyanın adı ile dosyanın kendisi aynı şey değildir. Dizin, bir adı inode numarasıyla eşleştirir. Inode; dosyanın izinleri, sahibi, boyutu ve diskteki veri konumları gibi bilgileri tutar.
Sabit bağlantı aynı inode'a işaret eden ek bir ad oluşturur. Bu nedenle iki sabit bağlantıdan biriyle dosyayı değiştirdiğinizde diğer ad üzerinden de aynı içerik görülür. Bir adı silmek veriyi hemen silmez; inode'a bağlı son dizin girdisi de silindiğinde ve dosyayı kullanan süreç kalmadığında alan serbest bırakılır.
Sembolik bağlantı ise genellikle hedefin yolunu içeren ayrı bir inode'dur. İşletim sistemi bu bağlantıyı izleyerek hedefe ulaşır. Hedef taşınır, silinir veya göreli yol artık geçerli olmazsa sembolik bağlantı kopuk hâle gelir.
Somut karşılaştırma
Aşağıdaki tablo, iki bağlantı türünün günlük kullanım kararındaki temel farkları gösterir.
Kısaca, bir dosyaya ikinci ve eşdeğer bir ad vermek istiyorsanız sabit bağlantı; başka bir konumu yol üzerinden göstermek istiyorsanız sembolik bağlantı kullanın. Uygulama yapılandırmalarında, güncel sürüme işaret eden dizinlerde ve dizin bağlantılarında genellikle sembolik bağlantı daha uygundur.
Çalıştırılabilir örnek
Bu örnek geçici bir dizin oluşturur; mevcut dosyalarınızı değiştirmez.
ln komutu sabit bağlantı, ln -s ise sembolik bağlantı oluşturur.- Terminalde aşağıdaki bloğu tek parça olarak çalıştırın:
Kod:d=$(mktemp -d) || exit 1 cd "$d" || exit 1 printf 'ilk içerik\n' > original.txt ln original.txt hard.txt ln -s original.txt soft.txt printf '%s\n' 'Dosyalar:' ls -li original.txt hard.txt soft.txt printf '%s\n' 'Sabit bağlantıdan okuma:' cat hard.txt printf '%s\n' 'Sembolik bağlantıdan okuma:' cat soft.txt mv original.txt renamed.txt printf '%s\n' 'Asıl ad yeniden adlandırıldıktan sonra sabit bağlantı:' cat hard.txt printf '%s\n' 'Asıl ad yeniden adlandırıldıktan sonra sembolik bağlantı:' cat soft.txt - Çıktıda
original.txtilehard.txtsatırlarının inode numarası aynı olmalıdır. Sembolik bağlantının inode numarası farklı olur velsçıktısı genelliklesoft.txt -> original.txtbiçiminde hedefi gösterir.cat hard.txtçalışmaya devam eder;cat soft.txtise sakladığı original.txt yolu artık bulunmadığı için hata verir. Dosya renamed.txt adıyla hâlâ vardır; örnekte hiçbir veri silinmez.
Aynı dosya sistemi içinde aynı inode numarasını görmek, sabit bağlantıların birbirinden bağımsız kopyalar olmadığını gösterir.
hard.txt üzerinden yazılan veri original.txt adıyla da okunur. Sabit bağlantının kendi kopyası olmadığı için bir bağlantıyı silmek diğer bağlantının içeriğini etkilemez.| Özellik | Sabit bağlantı | Sembolik bağlantı | Sonuç |
|---|---|---|---|
| İşaret ettiği şey | Aynı inode ve veri | Hedefin yolu | Sabit bağlantı doğrudan aynı dosya nesnesine ulaşır |
| Hedef silinirse | Diğer bağlantı çalışır | Bağlantı kopar | Başka ad korunur; bağımsız yedek oluşmaz |
| Dosya sistemi sınırı | Aynı bağlı dosya sistemi gerekir | Farklı dosya sistemlerine hedef gösterebilir | Diskler veya bağlama noktaları arasında sembolik bağlantı kullanılır |
| Dizinlerle kullanım | Dizinler için normalde oluşturulmaz | Dosya ve dizinleri gösterebilir | Dizin kısayolu için sembolik bağlantı tercih edilir |
Hangi durumda hangisini seçmeli?
- Bir dosyaya aynı dosya sistemi içinde ikinci bir ad vermek ve iki adın da hedef silinse bile bağımsız olarak yaşayabilmesini istiyorsanız sabit bağlantı kullanın.
- Bir dosya veya dizini başka bir konumdan erişilebilir yapmak, hedefi başka bir dosya sisteminde tutmak ya da sürüm dizinleri arasında geçiş yapmak istiyorsanız sembolik bağlantı kullanın.
- Bağlantının hedefi göreli bir yol ise, hedef yolunu bağlantının bulunduğu dizine göre hesaplayın. Bağlantı ve hedef birlikte aynı göreli düzenle taşınırsa göreli bağlantı çalışabilir; yalnız biri taşınırsa kopabilir. Mutlak yol da hedefkonumu değişince bozulur; taşınabilirlik için her durumda daha iyi değildir.
- Bir bağlantının türünü kontrol etmek için
ls -l, inode ve bağlantı sayısını görmek içinls -likullanın. Sembolik bağlantı hedefi bulunamıyorsa çıktıda hedefyolunu gösterir; renklendirme yapılandırmasına göre kopukluğu ayrıca vurgulayabilir. Yolun gerçekten varlığını ayrıca denetleyin.
Sık yapılan hatalar
Sabit bağlantıyı dosyanın yedeği sanmak yaygın bir hatadır. İki ad aynı veriyi kullandığından bir ad üzerinden yapılan değişiklik diğerinde de görünür. Gerçek ve bağımsız bir yedek için dosyanın içeriğini ayrıca kopyalamak gerekir.
Bir başka hata, sabit bağlantının farklı disklerde veya dosya sistemlerinde çalışacağını düşünmektir. Böyle bir denemede
ln hata verebilir; bu durumda hedefe yol gösteren sembolik bağlantı kullanılabilir. Ayrıca dizinlere sabit bağlantı oluşturmak normal kullanıcı işlemi olarak desteklenmez; dizinler için sembolik bağlantı kullanmak daha güvenlidir.Sık sorulan sorular
Sembolik bağlantının izinleri neden beklediğim gibi görünmüyor?
Sembolik bağlantının kendisi yerine çoğu erişim kontrolünde hedef dosyanın izinleri değerlendirilir. Bu nedenle erişim sorununu bağlantının değil, hedefin sahibi, izinleri ve üst dizin erişimi üzerinden inceleyin.