Sisteminizdeki bazı dosya veya klasörlerin dosya yöneticisinde görünmelerine rağmen bazen açılmadığını fark edebilirsiniz. Bunun nedeni genellikle, orijinal hedeflerini kaybetmiş sembolik bağlantıların varlığıdır; bunlara bozuk veya kopuk bağlantılar denir. Bu bağlantılar hiçbir yere yönlendirmez, ancak sistemde takılı kalır, yer kaplar ve kopyalama veya senkronizasyon sırasında karışıklığa neden olur.

Neyse ki, bu bozuk sembolik bağlantılar Linux, macOS ve hatta Windows'ta yerleşik komutlar kullanılarak birkaç basit adımda tespit edilip temizlenebilir. Bu işlem uzun sürmese de, temiz ve istikrarlı bir sistem sağlamaya yardımcı olur ve işletim veya yedeklemeler sırasında beklenmedik hataları önler.
Sembolik bağlantılar dosyalarınızı düzenlemenin harika bir yoludur, ancak mükemmel değillerdir. Çok hassastırlar ve var olmayan dosyalara yönlendiren bağlantılarla karşılaşmak kolaydır. Find bu konuda yardımcı olabilir, ancak işi daha iyi yapan üçüncü taraf araçlar da mevcuttur.
Kırık sembolik bağ nedir ve neden önemlidir?
Bozuk bir sembolik bağlantı, var olmayan bir dosya anlamına gelir. Bu iki şekilde olabilir:
Hiç var olmayan bir dosyaya bağlanma. Bunu, var olmayan bir dosyanın adını `ln`'e şu şekilde geçirerek kendiniz deneyebilirsiniz: `ln -s file-does-not-exist`.
- Mevcut bir dosyaya bağlanma ve sonra onu silme, örneğin: ln -s dosya dosyaya-bağlantı; rm dosya.
Bu bozuk sembolik bağlantılara bazen "sarkan bağlantılar" denir ve asıl amaçları ne olursa olsun, başka bir şeyi bozabilecekleri için sorunlara yol açabilirler. Programlar bozuk bağlantıları her zaman tutarlı bir şekilde işlemez:

ملاحظة
Ls programı bozuk linkler ile normal linkler arasında ayrım bile yapmadığı için kullanım sırasında tespit edilmesi zorlaşıyor.
Birçok GNU aracı oldukça kafa karıştırıcı bir hata mesajı üretir: "Çok fazla sembolik bağlantı düzeyi." Bu, ELOOP hatasını açıklayan temel Açık Kütüphane işlevinin belgelerinde açıklanmıştır:
[ELOOP]
Yol adı çevrilirken çok sayıda sembolik bağlantı bulundu. Bu, tekrarlayan bir sembolik bağlantı olarak anlaşılmaktadır.
Neyse ki, dosya komutu daha kullanışlı bir hata veriyor:

Bu mantıklıdır çünkü "dosya" komutunun temel amacı dosya türü hakkında bilgi sağlamaktır, wc ve diğer çoğu program ise bu dosyanın içeriği üzerinde başka görevler gerçekleştirmeye çalışır.
Bozuk bağlantılar, dosya sisteminizde gereksiz yer kaplayarak büyük hasara yol açabilir. Ayrıca, birden fazla dosyayla çalışan programlar bunlarla karşılaştığında kafa karıştırıcı sonuçlara veya istenmeyen hatalara da neden olabilirler. Bir klasörün derinliklerinde bozuk bir bağlantıyı kaybetmek ve ardından onu bulmakta veya tekrar tekrar aramakta sorun yaşamak kolaydır.
danışma
Bazı programlar, örneğin eza, bozuk bağlantıları kırmızı renkte göstererek bunları gösterir:

Find komutunu kullanarak açılan bağlantıları nasıl bulabilirsiniz?
`find` komutu, her türlü dosya araması için güvenilir ve temel bir araçtır. İster yeni değiştirilmiş dosyaları, ister belirli bir kullanıcıya ait dosyaları, ister boş klasörleri arıyor olun, onu kullanmanın bir yolu var. Bu, sembolik bağlantıları aramayı da içerir:
find . -type l
`-type l` seçeneği, aramaları yalnızca sembolik bağlantılarla sınırlandırır ve bu da aramayı daraltmaya yardımcı olur, ancak bir sonraki zorluk bozuk bağlantıları tespit etmektir. Çözüm, kullandığınız `find` sürümüne bağlıdır.
Modern GNU find en kullanışlı olanıdır çünkü -xtype: seçeneğini destekler.
find . -xtype l
-xtype seçeneği aslında "bu türü test etmeden önce sembolik bağlantı dizelerini çöz" anlamına gelir. Bir dosya ancak bu çözümleme başarısız olursa bağlantı olarak kalabileceğinden, ortaya çıkan dosyalar bozuk bağlantılar olmalıdır.
macOS Tahoe'da yüklü olan da dahil olmak üzere find'ın eski sürümleri bu argümanı desteklemeyebilir, bu yüzden alternatif bir çözüme ihtiyacınız olacak. Neyse ki, -L seçeneği mevcut. Bu seçenek, -xtype'a benzer şekilde çalışır, ancak dosya türünü kontrol etmez; yalnızca bağlantıları çözümlemeye çalışır. Bununla birlikte, -type tür denetimini kullanmanız gerekecektir.
find -L . -type l
Bir diğer önemli fark ise, -L komutunun yinelemeli klasör araması sırasında sembolik bağlantıları izlemesidir. Derin bir klasörde /'ye (yani köke) işaret eden garip bir bağlantınız varsa, tüm dosya sistemini aramanız gerekir. Muhtemelen bunu yapmak istemezsiniz, bu yüzden -L varsayılan komut değildir.
Bu sorun, tüm sembolik bağlantıları bulmak için find komutunu kullanarak ve ardından her dosyanın var olup olmadığını kontrol etmek için -exec seçeneğini kullanarak çözülebilir:
find . -type l -exec test ! -e {} \; -print
Bu biraz karmaşık ama işe yarıyor. "-type l" seçeneği, daha önce olduğu gibi bağlantıları arar, ardından "-exec" komutu, eksik dosyaları aramak için "-e" seçeneğini kullanarak test komutunu çağırır. Son olarak, "print" komutu dosya adını çıktı olarak verir.
Modern bir Linux sisteminde bozuk sembolik bağlantıları bulmaya çalışıyorsanız, `find -xtype l` komutu yeterli olacaktır. Hatta, yine `-exec:` seçeneğini kullanarak bozuk sembolik bağlantıları silmek için `find` komutunu kullanabilirsiniz.
find . -xtype l -exec rm {} \;
Ancak önce bu bağlantıları kontrol etmeniz gerekiyor ve yine de eşdeğer macOS komutu daha zor hale geliyor. Hatırlamak zorunda kalmamak için bir takma ad veya kabuk işlevi oluşturmak isteyebilirsiniz. Ya da daha iyi bir alternatif kullanabilirsiniz...
Bozuk bağlantıları bulup düzeltmek için sembolik bağlantı programını kullanın.
Yukarıda belirtilen yöntemleri pratik bulmuyorsanız veya sembolik bağlantılarla ilgili sürekli sorunlarla karşılaşıyorsanız, şunları kullanmayı düşünmelisiniz: Sembolik bağlantı aracı. C dilinde yazılmış bu küçük program, bozuk bağlantılar da dahil olmak üzere pek çok sorunlu bağlantıyı tespit edebilir.
Basitliği sayesinde karmaşık bir kurulum süreci yoktur, bu yüzden onu kaynak koddan oluşturmanız gerekir. Neyse ki, basitliği sayesinde herhangi bir sorunla karşılaşmazsınız.
Programın GitHub deposunu indirin Klasik üç adımlı inşaat sürecini izledi:
./configure
make
make install
danışma
C derleyicisi macOS kullanıcıları için varsayılan olarak mevcut değildir; sembolik bağlantılar oluşturmak için Apple'ın komut satırı araçlarını yüklemeleri gerekir. Öncelikle xcode-select-install komutunu çalıştırarak başlayın.
Programı kurduktan sonra, örneğin arama yapmak için bir klasör yolu vererek çalıştırabilirsiniz:
symlinks ~/
Bundan herhangi bir sonuç alamayabilirsiniz; varsayılan olarak alt dizinlerde çoğaltılmaz. -r seçeneği çoğaltılır ve dosya sisteminizdeki birçok sorunlu sembol bağlantısını ortaya çıkaracaktır. Hatta, "symlinks -r ~/ | wc -l" komutunu ilk çalıştırdığımda, sistemim tam 16,617 sembol bağlantısı bildirdi! Sembol bağlantılarım açıkça kötü düzenlenmiş.
Ancak bu bağlantıların hepsi bozuk değil. `symlinks` komutu dört tür eksik bağlantı bildirir:
- Engelli (sarkık).
- Mutlak: Bu bağlantılar bağlantı noktalarında sorunlara yol açabilir.
- Dağınık: Yollarında gereksiz olan . veya / içeren bağlantılar.
- Uzun: Yollarında gereksiz uzantılar bulunan bağlantılar. Bunlar yalnızca -s seçeneği kullanıldığında raporlanır.
Bu sorunlar, bağlantı oluşturmak için kullandığınız program olan `ln`'in, kendisine ilettiğiniz yolu kontrol etmemesi veya uygulamaması nedeniyle ortaya çıkar. En iyi çözümü, bekleyen bir bağlantı oluşturduğunuzda sizi uyaran, ancak yine de bağlantıyı oluşturan `-w` seçeneğidir. `ln` komutu, bu diğer sorunlu bağlantı türlerine karşı hiçbir koruma sağlamaz.
Sembolik bağlantılar da iki tür onarım yoluyla bu bağlantıları temizlemenize yardımcı olabilir.
İlk olarak, bekleyen bağlantıları kaldıran -d seçeneği var. Daha basit bir hayat istiyorsanız, bu işe yaramaz dosyalardan kurtulmanın en hızlı yolu budur. Manuel olarak düzeltilebildikleri için, önce bekleyen bağlantıların listesini kontrol etmek isteyebilirsiniz. Örneğin, bir dizinin adını değiştirdiyseniz ve bunu yaparken bir bağlantı kümesini bozduysanız, her bağlantıyı manuel olarak yeniden oluşturabilirsiniz.
İkinci seçenek, -c seçeneğidir ve -s seçeneği kullanılarak mutlak bağlantıları, yapılandırılmamış bağlantıları ve uzun bağlantıları düzeltir. Bence bu tartışmalı bir seçenek; bu tür sembolik bağlantılar, tamamen bozuk bağlantılardan daha az sorunludur. Mutlak bağlantı sorunlarından kaçınmak için yalnızca düzenli olarak farklı dosya sistemi bağlama noktaları kullanıyorsam bu seçeneği kullanırım.
Sembolik bağlantılar dosyaları düzenlemek için kullanışlı bir araçtır, ancak bazen orijinal konumlarını kaybettiklerinde can sıkıcı hale gelebilirler. Bu bozuk bağlantıları düzenli olarak temizlemek, sisteminizi hafif ve yönetilebilir tutar ve sizi yavaşlatabilecek veya yedeklemelerinizi etkileyebilecek hataları önler. Sisteminizi en iyi durumuna, yani bozuk yollardan arındırılmış ve sorunsuz çalışmaya hazır hale getirmek için birkaç basit komut yeterlidir.



