Mehmet

WFN Üye
Konular
1,851
Mesajlar
1,852
Çözüm
0
Ticaret Puanı
0
Üyelik
1 Ay 7 Gün
Konum
YurtDışı
Web Sitesi
Var
Alanı
Google Adsense
1/1
Konu sahibi
Sembolik bağlantı, hedef dosyanın içeriği değil, hedefe giden yol bilgisidir. Bu nedenle aktarım sırasında bağlantının kendisini korumak istiyorsanız bağlantıyı sembolik bağlantı olarak kopyalamalı; hedef dosyanın içeriğini de taşımak istiyorsanız bağlantıyı çözerek gerçek dosyayı aktarmalısınız. Yanlış seçim, aktarım sonrasında kırık bağlantılara, gereksiz kopyalara veya beklenmeyen dizin içeriğine yol açabilir.

Örneğin /var/www/site/current bağlantısı /var/www/site/releases/rev-001 dizinine işaret ediyorsa, bağlantıyı koruyan aktarım hedefte yine current adlı bir bağlantı oluşturur. Bağlantıyı çözen aktarım ise sürüm dizininin içeriğini current altında gerçek dosyalar olarak kopyalar.

Hangi davranışı seçmelisiniz?​


Önce bağlantının amacını belirleyin. Yayın dizinlerinde kullanılan current, public veya benzeri sürüm işaretçileri genellikle korunmalıdır. Tek başına taşınacak bir arşiv, yedek veya uygulama paketi hazırlanıyorsa hedef dosyanın içeriğini dahil etmek daha uygun olabilir.

AmaçTercihSonuç
Sunucudaki dizin yapısını aynen taşımakBağlantıyı koruHedefte yine sembolik bağlantı oluşur
Bağlantının gösterdiği içeriği pakete dahil etmekBağlantıyı çözGerçek dosya veya dizin kopyalanır
Yalnızca bağlantı listesini incelemekHedefi kopyalamaBağlantının yolu ayrıca doğrulanır

Bir bağlantının hedefi göreli ise, örneğin ../releases/current, hedefteki dizin yapısı değiştiğinde bağlantı bozulabilir. Mutlak hedefler de kaynak sunucudaki yolu gösterebilir ve yeni sunucuda aynı yol bulunmayabilir. Bu yüzden aktarım öncesinde bağlantıları ve hedeflerini listeleyin.

Rsync ile aktarım​


Linux sunucular arasında aktarımda, bağlantıyı korumak için arşivleme davranışıyla birlikte rsync kullanılabilir:

  1. Kaynak dizindeki bağlantıları ve hedeflerini kontrol edin: find /var/www/site -type l -printf '%p -> %l\n'.
  2. Önce rsync -an --itemize-changes source/ [email protected]:/var/www/site/ ile yazmadan kapsamı inceleyin. Sonuç doğruysa bağlantıları koruyarak aktarın: rsync -a source/ [email protected]:/var/www/site/. Buradaki sondaki /, kaynak dizinin içeriğinin hedefe aktarılmasını sağlar.
  3. Aktarım sonrasında hedefte aynı listeleme komutunu çalıştırın ve bağlantı yollarını kaynakla karşılaştırın.
  4. Bağlantının gerçekten çalıştığını, hedefteki ilgili uygulama kullanıcısının yetkileriyle test edin.

Bağlantının gösterdiği içeriği kopyalamak istiyorsanız rsync komutuna -L seçeneği eklenir: rsync -aL source/ [email protected]:/var/www/site/. Bu seçim, özellikle bağlantı bir dizini gösteriyorsa kaynak ağacının dışındaki dosyaları da aktarabilir. Yetkiniz dışındaki veya gizli içeriğin bu yolla pakete eklenmesine izin vermeyin; önce kuru çalışmanın kapsamını inceleyin. Büyük dizinlerde aktarım öncesi kapsamı kontrol edin.

Arşiv veya SFTP kullanırken​


Arşiv aracının belgelerindeki varsayılanı kontrol edin. Örneğin GNU tar, normalde sembolik bağlantının kendisini saklar; -h/--dereference verilmesi hedefi izlemesine yol açar. Başka bütün arşiv araçlarının aynı davranacağını varsaymayın. Bağlantıyı çözme seçeneği kullanılırsa arşive bağlantı yerine hedef içeriği girer. Arşivi başka sunucuda açmadan önce içindeki bağlantı hedeflerini listeleyin; özellikle mutlak yolların yeni sunucuda geçerli olduğundan emin olun.

SFTP ve FTP istemcilerinde sembolik bağlantı desteği sunucuya, istemciye ve yapılandırmaya göre değişebilir. İstemci bağlantıyı normal dosya gibi indirebilir, yalnızca bağlantı bilgisini gösterebilir veya bağlantıyı takip edebilir. Sembolik bağlantıların kesin olarak korunması gerekiyorsa aktarım biçiminizin bağlantı meta verisini desteklediğini doğrulayın; aksi durumda arşiv veya rsync gibi davranışı açıkça seçilebilen bir yöntem kullanın.

Aktarım sonrası kontrol ve yaygın hatalar​


  1. Hedefte bağlantı türünü kontrol edin: test -L /var/www/site/current && readlink /var/www/site/current. Başarılı durumda komut bağlantının hedef yolunu yazdırır.
  2. Hedef yolunun gerçekten var olup olmadığını kontrol edin: test -e /var/www/site/current. Komut çıktı vermeden başarılı oluyorsa hedef kullanılabilir durumdadır; başarısızsa bağlantı kırık olabilir.
  3. Göreli bağlantıların hedefte aynı dizin bağlamına sahip olduğunu doğrulayın. Kaynakta çalışan bir ../ yolu, farklı yerleşimde çalışmayabilir.
  4. Bağlantıyı izleyen kopyalama nedeniyle kaynak dışındaki bir dizinin veya büyük bir sürüm arşivinin aktarılmadığını kontrol edin.
  5. Hedefte uygulama kullanıcısı, hedef dosyaya ve yol üzerindeki gerekli dizinlere erişebiliyor mu test edin. Linux’ta sıradan sembolik bağlantının kendi izin bitleri çoğunlukla erişim kararını belirlemez; hedef ve dizin geçiş izinleri önemlidir. Dosya var olsa bile dizin geçiş izni yoksa uygulama içeriği okuyamaz.

Bir bağlantı aktarım sonrasında kırık görünüyorsa hemen aynı adlı gerçek bir dizin veya dosya oluşturmayın. Önce readlink ile kaydedilmiş hedefi, kaynak ve hedef dizin yapısını, ardından izinleri karşılaştırın. Sonraki adım; hedef yolu düzeltmek, eksik hedef içeriğini ayrıca aktarmak veya bağlantıyı bilinçli olarak gerçek dosyalarla değiştirmek olmalıdır.

Kaynaklar​



Sık sorulan sorular​


Sembolik bağlantı ile normal dosya nasıl ayırt edilir?​


test -L dosya sembolik bağlantıyı kontrol eder. ls -l çıktısındaki -> işareti de bağlantının hedefini gösterir. Bağlantının hedefi bulunamasa bile bağlantı nesnesi varlığını sürdürebilir.

Bağlantının hedefi aktarılmıyorsa ne yapmalıyım?​


Bağlantıyı koruyarak aktarım yaptıysanız hedef dosya veya dizini ayrıca taşıyın ya da hedefteki yol yapısını oluşturun. İçeriğin tek pakette bulunması gerekiyorsa aktarımı bağlantıyı çözecek şekilde yeniden planlayı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.
Robotlar:
  • Anthropic