Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 6 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi

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.

  1. 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
  2. Çıktıda original.txt ile hard.txt satırlarının inode numarası aynı olmalıdır. Sembolik bağlantının inode numarası farklı olur ve ls çıktısı genellikle soft.txt -> original.txt biçiminde hedefi gösterir. cat hard.txt çalışmaya devam eder; cat soft.txt ise 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.

ÖzellikSabit bağlantıSembolik bağlantıSonuç
İşaret ettiği şeyAynı inode ve veriHedefin yoluSabit bağlantı doğrudan aynı dosya nesnesine ulaşır
Hedef silinirseDiğer bağlantı çalışırBağlantı koparBaşka ad korunur; bağımsız yedek oluşmaz
Dosya sistemi sınırıAynı bağlı dosya sistemi gerekirFarklı dosya sistemlerine hedef gösterebilirDiskler veya bağlama noktaları arasında sembolik bağlantı kullanılır
Dizinlerle kullanımDizinler için normalde oluşturulmazDosya ve dizinleri gösterebilirDizin 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çin ls -li kullanı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.

Bir editörde dosyayı kaydettikten sonra iki sabit bağlantı neden ayrılmış olabilir?​

Bazı editörler dosyayı yerinde değiştirmek yerine yeni bir geçici dosya yazıp eski yolun üzerine yeniden adlandırır. Bu durumda o ad yeni inode’a geçerken diğer sabit bağlantı eski inode’da kalabilir. Değişiklik öncesi ve sonrası inode numaralarını aynı dosya sisteminde karşılaştırın.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Konuyu görüntüleyenler

Bu konuyu şu anda görüntüleyen üye bulunmuyor.