Linux'ta Bozuk Sembolik Bağlantılar Nasıl Bulunur ve Silinir

Yayınlanan: 2022-01-29
Linux dizüstü bilgisayarda bir terminal penceresi.
Fatmawati Achmad Zaenuri/Shutterstock

Linux'taki sembolik bağlantılar harika bir özelliktir, ancak bunlar kopabilir ve hiçbir şeyi göstermeden bırakılabilir. Bozuk sembolik bağları nasıl bulacağınız, gözden geçireceğiniz ve gerekirse sisteminizden nasıl kaldıracağınız aşağıda açıklanmıştır.

Sembolik Bağlantılar 101

"Yazılımsal bağlantılar" ve "sembol bağlantılar" olarak da adlandırılan sembolik bağlantılar, dosyalara ve dizinlere işaret edebilen bir kısayol biçimidir. Bir sembolik bağlantı, bir dosya yöneticisi penceresindeki normal bir dosya veya dizin gibi görünür. Ayrıca, bir terminal penceresinde bir dosya listesinde bir giriş olarak görünür. Sembolik bağlantının işaret ettiği dosya veya dizin, dosya sistemi ağacında herhangi bir yerde olabilir.

Örneğin, ev dizininizde, dosya sistemi ağacında başka bir yerde bulunan “text-file.txt” adlı bir dosyaya işaret eden “dave-link” adlı bir sembolik bağlantınız olduğunu varsayalım. Sembolik bağlantıda kullandığınız komutlar, işaret ettiği dosyaya otomatik olarak uygulanır. Sembolik bağlantıda cat veya less kullanmayı denerseniz, aslında “text-file.txt” dosyasının içeriğini göreceksiniz.

Standart bir Linux kurulumu birçok sembolik bağlantı içerir. Kendiniz oluşturmasanız bile, işletim sistemi bunları kullanır. Uygulama yükleme rutinleri, yürütülebilir dosyalara işaret etmek için genellikle sembolik bağlantılar kullanır. Yazılım güncellendiğinde, ikili dosya yeni sürümle değiştirilir ve yeni dosyanın adı eskisiyle aynı olduğu sürece tüm sembolik bağlantılar eskisi gibi çalışmaya devam eder.

Kök dizinde ls kullanarak bazı sembolik bağlantıları kolayca görebiliriz. Girişlerin bazıları farklı bir renkte görüntülenir; Ubuntu 20.10 test makinemizde açık mavi renkte görüntülenirler.

Aşağıdakileri yazıyoruz:

 ls / 

Reklamcılık

-l (uzun listeleme) seçeneğini kullanarak daha derine inebiliriz. Tüm “lib” girdilerine ve tek “bin” girdisine bakmak için aşağıdaki komutu yazıyoruz:

 ls -l /lib* /bin 

Her satırın başında, öğenin bir sembolik bağlantı olduğunu gösteren bir “l” bulunur. “->” den sonraki metin, sembolik bağın neyi işaret ettiğini gösterir. Örneğimizde, hedeflerin tümü dizinlerdir.

İzinler, sahip, grup ve diğerleri için okuma, yazma ve yürütme olarak listelenir. Bunlar varsayılan sahte girişlerdir. Sembolik bağlantıların işaret ettiği nesneler üzerindeki gerçek izinleri yansıtmazlar. Öncelikli olan ve dosya sistemi tarafından onurlandırılan hedef dosya veya dizindeki izinlerdir.

Kırık Sembolik Bağlantılar

İşaret ettiği dosya silindiğinde veya başka bir konuma taşındığında bir sembolik bağ bozulur (veya asılı kalır). Bir uygulamanın kaldırma rutini düzgün çalışmıyorsa veya tamamlanmadan önce kesilirse, bozuk sembolik bağlantılarla kalabilirsiniz.

Birisi bir dosyayı sembolik bağlantıların işaret ettiğini bilmeden manuel olarak silerse, bu sembolik bağlantılar artık çalışmayacaktır. Buldozerle yıkılmış bir kasabayı gösteren yol işaretleri gibi olacaklar.

Geçerli dizinde "merhaba" adlı bir sembolik bağlantı kullanarak bu davranışı kolayca görebiliriz. Görmek için ls kullanarak şunu yazıyoruz:

 ls -l
Reklamcılık

"bin" adlı bir dizinde "htg" adlı bir programa işaret eder. Sembolik bağlantıyı "çalıştırırsak", programı bizim için çalıştırır:

 ./Merhaba

Şimdi programı doğrudan çalıştırarak bunun olup olmadığını kontrol edebiliriz:

 ../bin/htg

Beklendiği gibi, aynı yanıtı alıyoruz. Program dosyasını silelim:

 rm ../bin/htg

Şimdi, sembolik bağlantıya baktığımızda, kırmızı ile listelendiğini görüyoruz çünkü Linux onun bozuk olduğunu biliyor. Ayrıca bize neyi gösterdiğini de söyler, böylece dosyayı değiştirebilir, programı yeniden derleyebilir veya sembolik bağlantıyı onarmak için ne gerekiyorsa yaparız.

Sembolik bağlantıyı çalıştırmayı denersek, aldığımız hatanın, sembolik bağlantının işaret ettiği programın adı yerine sembolik bağlantı adına başvuruda bulunduğunu unutmayın.

Aşağıdakileri yazıyoruz:

 ./Merhaba 

Kırık Sembolik Bağlantıları Bulma

find öğesinin çoğu modern sürümü, bozuk sembolik bağları bulmayı kolaylaştıran xtype (genişletilmiş tür) seçeneğine sahiptir. Bağlantıları aramasını söylemek için l bayrağını xtype ile kullanacağız. xtype find gibi kullanmak, diğer type bayraklarından herhangi biri olmadan, xtype bozuk bağlantıları döndürmeye zorlar:

 bulmak . -xtype l 

Komutu test ana dizinimizde çalıştırmak, epeyce bozuk sembolik bağlantı bulur. Aramanın varsayılan olarak özyinelemeli olduğunu unutmayın, bu nedenle tüm alt dizinleri otomatik olarak arar.

Bilerek kırdığımız "merhaba" sembolik bağlantısı beklediğimiz gibi listeleniyor. Diğer sembolik bağlantılardan biri Firefox tarayıcısıyla ilgilidir ve geri kalanı anlık görüntülerle ilişkilidir.

Çıktıyı wc üzerinden -l (satırlar) seçeneği ile aktarırsak, kırık sembolik bağları saymakla aynı olan satırları sayabiliriz.

Aşağıdakileri yazıyoruz:

 bulmak . -xtype l | wc -l 

Hiçbir şeye işaret etmeyen 24 bozuk sembolik bağlantımız olduğu konusunda bilgilendirildik.

Bul, Gözden Geçir ve ardından Kaldır

Acele etmeden ve tüm bozuk sembolik bağlantıları silmeden önce, find komutunun sonuçlarına bakın. Bozuk sembolik bağlantılardan herhangi birinin geçerli bir nedeni olup olmadığına bakın.

Bazen, sorun hedef dosyadan ziyade sembolik bağlantı olabilir. Sembolik bağlantı yanlış oluşturulmuşsa hiçbir şeye işaret etmeyebilir, ancak gerçek hedef mevcuttur. Sembolik bağlantıyı yeniden oluşturmak bu durumda çözüm olacaktır.

Ayrıca, görünüşte bozuk bir sembolik bağlantının, bir dosya kilidi göstergesi veya başka bir devam/devamsızlık göstergesi gibi başka bir şey olarak kullanılması da mümkündür. Firefox bunu yapar; listemizdeki ilk sembolik bağlantı budur. Yine de test makinemizde Firefox kullanılmıyor, bu yüzden onu silmemiz güvenli.

Reklamcılık

Hedefin yalnızca periyodik olarak mevcut olması da mümkündür ve bu, söz konusu yazılımın beklenen (ve istenen) davranışıdır. Belki hedef dosya başka bir makineden veya buluttan kopyalanmıştır, işlevini yerine getirir ve ardından tekrar silinir, ancak bir sonraki döngüde farklı bir programla değiştirilmek üzere.

Bozuk sembolik bağlantı, başarısız olan bir yazılım yüklemesinin de belirtisi olabilir. Bu durumda sembolik bağlantıyı silmek yerine ya manuel olarak düzeltmeli ya da kurulumu tekrarlamalısınız.

Saklamanız gereken bozuk bağlantıları düzelttiğinizde, aramayı gerçekleştirmek için komutu tekrarlayın. Sabit sembolik bağlantılar daha sonra arama sonuçlarında bulunmamalıdır.

Güvenliğiniz için, sembolik bağlantı kaldırmalarınızı kendi dizinlerinizle sınırlamak en iyisidir. Bu komutları kök olarak veya sistem dizinlerinde çalıştırma konusunda son derece dikkatli olun.

Bozuk Sembolik Bağlantıları Kaldırma

-exec (yürüt) seçeneği, find sonuçlarında komutları çalıştırır. Her bozuk sembolik bağlantıyı silmek için rm kullanacağız. {} dizesi, her biri find tarafından keşfedildiği için her bozuk sembolik bağın adıyla değiştirilir.

-exec çalışmasını istediğimiz komutların listesini sonlandırmak için noktalı virgül ( ; ) kullanmalıyız. Noktalı virgülden "kaçmak" için bir ters eğik çizgi ( \ ) kullanacağız, bu nedenle Bash yapması gereken bir şey değil, find komutunun bir parçası olarak kabul edilir.

Aşağıdakileri yazıyoruz:

 bulmak . -xtype l -exec rm {} \; 

Reklamcılık

Herhangi bir şey olduğuna dair hiçbir belirti olmadan komut istemine geri döndük. Bozuk bağlantıların kaldırıldığını doğrulamak için, onları aramak için aşağıdaki komutu tekrarlıyoruz:

 bulmak . -xtype l 

Herhangi bir eşleşen sonuç yok, bu da bozuk sembolik bağlantıların kaldırıldığı anlamına geliyor.

Önce İncelemeyi Unutmayın

Yine, onları silmek için komutu çalıştırmadan önce her zaman bir sembolik bağlantı listesini gözden geçirmek için zaman ayırın. Bunları uygun dizinlerde silmek için komutu çalıştırarak, emin olmadığınız herhangi bir şeyi silmekten kaçınabilirsiniz.

Örneğin, yukarıda, komutu “.snap” dizininde çalıştırabilir ve ardından tek “merhaba” sembolik bağlantısını manuel olarak kaldırabilirdik. Bu, Firefox kilit sembolik bağlantısına dokunulmamış olurdu.