Burada oldukça doğru cevaplar var ama kimsenin orijinal yanlış algılamayı gerçekten ele aldığını sanmıyorum. Asıl soru temel olarak "sembolik bir bağlantı kurduğumda, daha sonra tanımlamak kolaydır. Ancak sert bir bağlantıyı nasıl tanımlayacağımı bulamıyorum." Ve evet, cevaplar temelde “yapamazsınız” ifadesine dayanıyor ve az ya da çok nedenini açıklıyor, ama hiç kimse bunun gerçekten kafa karıştırıcı ve garip olduğunu kabul etmiyor gibi görünüyor.
Tüm bunları okuyorsanız ve neler olduğunu çözdüyseniz, o zaman iyisiniz; benim küçük parçamı okumana gerek yok. Hala kafanız karıştıysa, devam edin.
Gerçekten çok kısa cevap, sabit bir bağlantının sembolik bir bağlantının değil, bir bağlantının olmadığıdır. Dizin yapısında, orijinal dizin girişinin yaptığı aynı bayt grubuna işaret eden yeni bir giriştir ve bir kez oluşturduğunuzda, tıpkı 'gerçek' ve birincisi gibi meşru olur. Sürücünüzdeki her "normal" dosyada en az bir tane sabit bağlantı vardır; Bu olmadan, içeri görmüyorum herhangidizine bakın ve başvuruda bulunamaz veya kullanamaz. Yani, eğer Fred.txt dosyanız varsa ve Wilma.txt ve Barney.txt dosyasını ona bağlarsanız, her üç isim de (ve dizin girişleri) aynı dosyaya atıfta bulunur ve hepsi de aynı şekilde geçerlidir. İşletim sisteminin metin editörünüzde "kaydet" düğmesine bastığınızda girişlerden birinin oluşturulduğunu ve diğerlerinin "ln" komutuyla yapıldığını söylemesinin bir yolu yoktur.
OS gelmez olsa çok farklı girişler aynı dosyayı işaret nasıl takip etmek zorunda. Wilma.txt dosyasını silerseniz, sürücünüzde boş yer bırakmamanız şaşırtıcı değildir. Ancak Fred.txt dosyasını silerseniz ('orijinal' dosya), hala Fred.txt olarak bilinen sürücüdeki veriler yine de Barney.txt olduğundan, sürücünüzde hiç yer boşaltmazsınız. Yalnızca tüm dizin girişlerini sildiğinizde , işletim sistemi verilerin işgal ettiği alanı tahsis eder.
Eğer Barney.txt sembolik bir bağlantı olsaydı , Fred.txt 'yi silmek boşluğu ayırırdı ve Barney.txt şimdi bozuk bir bağlantı olurdu. Ayrıca, üzerinde sembolik bir bağlantıya sahip bir dosyayı taşır veya yeniden adlandırırsanız, bağlantıyı kesersiniz. Ancak, sabitlenmiş bir dosyayı, dosya / veriye işaret eden diğer dizin girişlerini bozmadan istediğiniz şekilde taşıyabilir veya yeniden adlandırabilirsiniz, çünkü bunların tümü, sürücüdeki aynı veri bloğuna başvuran dizin girişleridir ( Bu veri inode).
[İki yıl sonra, ve o son bit karıştı bana bir dakika, bu yüzden ben açıklamak düşünüyorum. "Mv ./Wilma.txt ../elsewhere/Betty.txt" yazarsanız, dosyayı taşıyor gibi görünüyorsunuz, ama aslında değilsiniz. Yaptığınız şey, bir satır öğesini geçerli dizininizin dizin listesinden çıkarmasıdır, "Wilma.txt" adı "inode" kullanılarak bulunan verilerle ilişkilendirilir. #, "ve dizinin dizin listesine yeni bir satır öğesi ekleyerek" / "adıyla Betty.txt ismi yazıyor, inode #######. Bu nedenle, 2 gigabaytlık bir dosyayı 2 kilobaytlık bir dosya kadar hızlı bir şekilde, aynı sürücüdeki başka bir konuma taşıdığınız sürece 'taşıyabilirsiniz'.
OS aynı veri yığın işaret kaç farklı dizin girişleri takip etmek olduğundan, sen yapabilirsiniz belirli bir dosya sert bağlanmıştır eğer kesin söyleyemem rağmen anlatmak dizin girdisi olduğunu eğer 'Orijinal' bir bakıyor ya da değil bakıyor. Bunun bir yolu "ls" komutu, özellikle de "ls -l" (bu, tire işaretinden sonraki küçük harf L'dir).
Daha önceki bir örneği ödünç almak ...
-rw-r--r-- 3 stephane stephane 0 Nov 12 19:55 f1
İlk harf bir çizgidir, bu yüzden bir dizin ya da egzotik bir şey değil, 'normal' sıradan bir dosyadır. Fakat eğer gerçekten sıradan olsaydı, rwx-ish bölümünden sonra gelen bu sayı, "bu veri bloğuna işaret eden bir dizin girişi var." Ancak bu, sert bağlantıların gösterisinin bir parçası olduğu için "3" yazıyor.
Bunun garip ve gizemli davranışlara yol açabileceğini unutmayın (eğer başınızı sert bağlantıların etrafına sarmazsanız, yani). Fred.txt’yi metin editörünüzde açar ve bazı değişiklikler yaparsanız, Wilma.txt ve Barney.txt’te de aynı değişiklikleri görecek misiniz? Olabilir. Muhtemelen. Metin editörünüz orijinal dosyayı açıp değişiklikleri üzerine yazarak değişiklikleri kaydederse, o zaman evet, yine de üç isim de aynı (yeni değiştirilmiş) metni gösterecektir. Ancak metin editörünüz yeni bir dosya (Fred-new-temp.txt) yaratırsa, değiştirilmiş versiyonunuzu buna yazar, sonra Fred.txt'yi siler, sonra Fred-new-temp.txt'i Fred.txt olarak değiştirir, Wilma ve Barney hala değiştirilen yeni sürümü değil, orijinal sürümü işaret ediyor. Sert bağlantıları anlamadıysanız, bu sizi biraz kızdırabilir. :) [Tamam, aslında şahsen hiçbir şey bilmiyorumyeni dosya / yeniden adlandırma işlemini yapan metin editörleri , ancak tam olarak bunu yapan birçok program biliyorum, o yüzden uyanık kal.]
Son bir not: 'fsck' (dosya sistemi kontrolü) 'nin kontrol ettiği şeylerden biri, sürücünüzde bir şekilde artık bir dizin girişi tarafından referans alınmayan veri blokları olup olmadığıdır. Bazen bir şeyler ters gider ve bir inode'a işaret eden tek dizin girişi silinir, ancak sürücü alanı "kullanılabilir" olarak işaretlenmez. Bu nedenle, fsck'in işlerinden biri, kayda değer bir dosya olmadığından emin olmak için tahsis edilen alanı tüm dizin girişleriyle eşleştirmektir. Bazıları bulursa, yeni dizin girişleri oluşturur ve bunları "lost + found" içine koyar.