Bir hard link ile sembolik bir link arasındaki fark nedir?

447

Başlığın belirttiği gibi, bir sabit bağlantı ile ln komutu tarafından oluşturulan yumuşak bağlantı arasındaki farkı bilmek istiyorum. % Co_de% komutu bilgi sağlıyor, ancak sorumu yeterince yanıtlamıyor.

Ayrıca, birisinin sembolik bir bağlantı üzerinden sert bağlantının tercih edilebileceği bir ayar sağlayabilmesi hoş olurdu.

    
sordu ste_kwr 29.02.2012 10:03

10 cevap

31

Linux / Unix'te, Kısayollar Bağlantılar olarak bilinir

Bağlantı iki türden oluşur: yumuşak bağlantılar (sembolik bağlantılar) veya sabit bağlantılar.

  1. Yumuşak Bağlantılar (sembolik bağlantılar)

    Dosyalara ve dizinlere bağlantılar oluşturabilir, farklı bölümlerde bağlantılar (kısayollar) ve orijinalden farklı bir inode numarası oluşturabilirsiniz.

    gerçek kopyası silinirse, bağlantısı çalışmaz .

  2. Sabit Bağlantılar

    Sabit bağlantılar sadece dosyalar içindir; Farklı bir inode numarasıyla farklı bölümlerdeki bir dosyaya bağlantı kuramazsınız.

    gerçek kopyası silinirse, bağlantı çalışır , çünkü gerçek kopyanın eriştiği veriye eriştiği için erişir.

Soru: Yumuşak bağlantıyı nasıl yapabilirim?

Yanıt: ln -s ile yumuşak bir bağlantı yapılabilir; önce kaynağı tanımlamanız ve sonra hedefi tanımlamanız gerekir. (Hem kaynak hem de hedefin tam yollarını tanımlamanız gerektiğini unutmayın. Aksi takdirde işe yaramaz.)

 sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib32/libGL.so.1
             (----------Source-------)             ( Destination )

Gördüğünüz gibi farklı bir inode vardır ve farklı bir bölüm üzerinde yapılabilir.

Soru: Sabit bağlantıyı nasıl yapabilirim?

Yanıt: Sabit kod ln ile yapılabilir; önce kaynağı tanımlamanız ve sonra hedefi tanımlamanız gerekir. (Hem kaynak hem de hedefin tam yolunu tanımlamanız gerektiğini unutmayın. Aksi takdirde işe yaramaz.)

Diyelim ki /script dizininde firefox dizininde bir komut dosyası var.

 ls -i # Shows you the inode
 5898242 firefox

 ln /scripts/firefox /scripts/on-fire
       ( Source )    ( Destination )

Gördüğünüz gibi aynı inode'ya sahip. Orijinal olanı silersem bağlantı çalışır ve orijinal olarak işlev görür.

Yukarıda bağlantının çalıştığını kontrol edip orijinal firefox komut dosyasını silin.

Siz Soru: Birinin, simgesel bir bağlantı üzerinden sert bağlantının tercih edilebileceği bir ayar sağlayabilmesi hoş olurdu.

Yanıt : Disk bölümü düzenine bağlı olarak Sabit Bağlantılar 'ın aynı bölümdeki olması gereken sınırlama vardır (-1 puan) ve sadece (-1 puan) dosyalarına bağlanabilir, ancak orijinali silindiyse +1 nokta bağlantı çalışır ve orijinal gibi davranır.

Diğer taraftan, yumuşak bir bağlantı, dizinlere veya dosyalara (+1 nokta) işaret edebilir ve bölüm sınırlaması yoktur (+1 nokta), ancak kaynak varsa (- 1 nokta) silindi bağlantı işe yaramaz.

    
verilen cevap Qasim 09.05.2013 02:42
314

Bir hardlink bir dosya için bir işaretçi değil, aynı inode'u işaret eden bir dizin girişi (dosya). Diğer dosyanın adını değiştirseniz bile, bir link hala dosyaya işaret eder. Diğer dosyayı yeni bir sürümle değiştirirseniz (kopyalayarak), bir bağlantı yeni dosyaya işaret etmeyecektir. Aynı dosya sisteminde yalnızca sabit bağlantılara sahip olabilirsiniz. Hardlink'lerle orijinal dosya ve linkler kavramınız yoktur, hepsi eşittir (bir nesneye referans olarak düşünün). Bu çok düşük seviyeli bir konsept.

Öte yandan, bir sembolik link aslında başka bir yola işaret eder (dosya adı); Her bağlantıya eriştiğinizde dosyanın adını çözer. Dosyayı taşırsanız, sembolik link takip etmez. Dosyayı başka biriyle değiştirirseniz, adı saklamak için sembolik bağlantı yeni dosyaya işaret eder. Symlinks dosya sistemlerini kapsayabilir. Symlink'lerle, gerçek dosya ile sembolik link arasında çok net bir ayrımınız olur, bu da işaret ettiği dosyayla ilgili yolun yanında hiçbir bilgi saklar.

    
verilen cevap vartec 18.05.2011 11:51
293

"Bir resim bin kelimeye bedeldir."

Ve, "Bir örnek yüz paragraflara değer ..."

İki dosya oluştur:

$ touch blah1   
$ touch blah2

Bunlara bazı veriler girin:

$ echo "Cat" > blah1
$ echo "Dog" > blah2

Ve beklendiği gibi:

$cat blah1; cat blah2
Cat
Dog

Sert ve yumuşak bağlantılar oluşturalım:

$ ln blah1 blah1-hard
$ ln -s blah2 blah2-soft

Bakalım neler oldu:

$ ls -l

blah1
blah1-hard
blah2
blah2-soft -> blah2

blah1'in adını değiştirmek önemli değil:

$ mv blah1 blah1-new
$ cat blah1-hard
Cat

blah1-sabit noktaları inode'a, dosyanın içeriğini değiştirmemiş.

$ mv blah2 blah2-new
$ ls blah2-soft
blah2-soft
$ cat blah2-soft  
cat: blah2-soft: No such file or directory

Dosyanın içeriği bulunamadı çünkü yumuşak bağlantı adı değiştirdi, değiştirildi ve içeriğe değil. Benzer şekilde, blah1 silinirse, blah1-hard hala içeriği tutar; blah2 silinirse, blah2-soft varolan bir dosyanın sadece bir bağlantısıdır.

kaynak: açık bir şekilde StackOverflow!

    
verilen cevap ABcDexter 21.07.2016 09:33
87

Her ikisi de dosyalara işaretçilerdir; fark, işaretçinin tür . Sembolik bir bağlantı, başka bir dosyaya isme göre işaret eder. Sembolik bir bağlantı olarak tanımlayan özel bir mod biti vardır ve içeriği gerçek dosyanın adıdır. Sadece bir isim içerdiği için, bu ismin aslında mevcut olmaması ya da farklı bir dosya sisteminde var olması gerekebilir. Adlandırılmış dosyayı değiştirirseniz (içeriğini etkilemeden içeriğini değiştirirseniz), bağlantı hala aynı adı içerir ve şimdi yeni dosyaya işaret eder. Sembolik bir bağlantıyı kolayca tespit edebilir ve işaret ettiği dosyanın adını görebilirsiniz.

Sabit bağlantı, dosyaya inode numarasıyla işaret eder. Bu nedenle, sabit bağlantılar bir dosyanın ilk adından farklı değildir. Sabit bağlantı adına karşı "gerçek" bir isim yoktur; tüm sabit bağlantılar dosya için eşit geçerli isimlerdir. Bu nedenle, bağladığınız dosya aslında var olmalıdır ve bağlantı oluşturmaya çalıştığınız aynı dosya sisteminde olmalıdır. Orijinal adı silerseniz, sabit bağlantı hala aynı dosyaya işaret eder. Tüm sabit bağlantılar dosya için eşit olarak geçerli adlar olduğundan, birine bakamazsınız ve dosya için diğer isimleri göremezsiniz; Bunu bulmak için, her dosyaya bakmaya ve aynı inode numarasına sahip olan diğer adları bulmak için inode numaralarını karşılaştırmalısınız.

Bir dosyanın kaç adının ls -l çıkışından olduğunu söyleyebilirsiniz. Dosya modundan sonraki ilk sayı, bağlantı sayısıdır. 1'den fazla bağlantıya sahip bir dosyada başka bir ad (lar) vardır ve tersine, yalnızca 1 numaralı bağlantı sayısına sahip bir dosyada (başka) sabit bağlantı yoktur.

    
verilen cevap psusi 18.05.2011 17:23
57

Bir hardlink sadece aynı dosya sisteminde çalışabilir, sadece aynı inode için farklı bir addır (dosyalar inode tarafından dahili olarak referanslanır). Bir dosya yalnızca inode'a giden son bağlantı bittiğinde diskten silinir (siz rm d veya unlink d son link). Sabit bağlantılar genellikle sadece dosyalar için değil, dizinlerde çalışır.

Bir sembolik link (sembolik link), başka bir dosyaya giden yolu içeren özel bir dosyadır. Bu yol mutlak veya göreceli olabilir. Symlinks, dosya sistemlerinde çalışabilir ve örneğin harici bir sabit sürücüyü fişten çekip başka bir dosya ile değiştirirseniz, farklı dosyalara işaret edebilir. Bir sembolik dosya veya dizinlere işaret edebilir.

    
verilen cevap knittl 29.02.2012 10:20
20

Diğer ileti dizisinden (postanızın en üst kısmından bağlanan) yanıtlardan biri bu sayfadan

  • Standart dosyalar, dosya sisteminden fiziksel verilere işaret eden bir inode için bir göstericidir. Dosya bileşeni, bağlantısını dosya sistemine (esas olarak yolu) ve inode'a giden bir bağlantıya kaydeder.
  • Sabit bağlantılar, dosyalar gibidir. Doğrudan bir inode için ek bir işaretçidirler.
  • Sembolik bağlantılar, bir dosya sistemi yolunu bir dosyada saklayan ayrı dosyalar (ayrı inode ve veriler dahil).

Kernel ve dosya sistemleri, her şeyi şeffaf bir şekilde çevirir.

Yani buna dayanarak:

  • Sabit bağlantılar yalnızca aynı dosya sistemi bağlantısına izin verir. Symlinks herhangi bir yola işaret edebilir.
  • Sabit bağlantılar (esas olarak) mutlak verilere işaret eder. Symlinks göreli yollara işaret edebilir (örneğin ../parent.file )
  • Ek olarak, bir sabit linkin hedef işaretçisini hareket ettirirseniz (ki, hatırlayın, kendisi aslında bir inode'a işaret eden bir hard-link'tir), hard-link hala çalışır. Bir bağlantı bağlantısının hedefini taşımak genellikle sembolik bağlantıyı keser.
  • Bir sabit bağın çözümlenmesi daha hızlı ancak ölçülemez bir şekilde olacaktır. Hızın önemsiz kısmı esnek olmayan bir dosya sisteminin maliyetine geliyor.

Kendimi biraz kafam karıştırabilirdim ama çeşitli şeyler okumak, standart bir dosya ile bir hardlink arasındaki farkı bulmak için uğraşıyorum. Okuduğum her dosya, fiziksel verilere işaret eden bir inode'a bağlanan bir hardlink'ten (dosya adını saklamaktan) ibarettir.

Bir hardlink eklemek, sadece ek bir dosya sistemi tabanlı işaretçi ile bir inode sağlar. Bu doğru mu?

    
verilen cevap Oli 18.05.2011 17:10
15

Yumuşak Bağlantı ne zaman kullanılır?

Dosya sistemleri arasında bağlantı kurun: Dosya sistemlerini dosyalara bağlamak istiyorsanız, yalnızca symlinks / soft linkleri kullanabilirsiniz.

Dizine bağlantılar: Dizinleri bağlamak istiyorsanız, bir dizine sabit bağlantı oluşturamayacağınız için Yumuşak bağlantılar kullanmalısınız.

Sabit Bağlantı ne zaman kullanılır?

Depolama Alanı: Sabit bağlantılar oluşturulurken oluşturulan yeni düğümler olmadığından, sabit bağlantılar çok az yer kaplar. Yumuşak bağlantılarda, alanı (genellikle dosya sistemine bağlı olarak 4 KB) tüketen bir dosya oluştururuz.

Performans: Başka bir dosyaya geçmek yerine disk işaretçisine doğrudan eriştiğiniz için sabit bağlantıya erişirken performans biraz daha iyi olacaktır. Dosya konumunu taşıma: Kaynak dosyayı aynı dosya sisteminde başka bir konuma taşırsanız, sabit bağlantı çalışmaya devam eder, ancak yumuşak bağlantı başarısız olur.

Fazlalık: Verilerinizin güvenli olduğundan emin olmak istiyorsanız, sabit bağlantıda olduğu gibi sabit bağlantı kullanıyor olmanız gerekir; veriler, dosyalara tüm bağlantılar silinmeden, yumuşak bağlantı yerine silinene kadar güvenlidir. Dosyanın ana örneği silindiyse verileri kaybedersiniz.

    
verilen cevap Osama 07.09.2014 01:48
7

Karışıklık, "dosya adı" ile sabit bağlantı arasındaki farkı bulmaya çalıştığınızda, hiçbiri olmadığından oluşur.

Oluşturduğunuz her dosya, diskteki bir veri ve bir sabit bağlantıdan () oluşur. Bu, bir dizindeki bir dosya adıdır ve diskteki verilere işaretçi olur. Hikayenin sonu. Son (veya sadece) sabit bağlantı silindiğinde, işletim sistemi artık verilerin gerekmediğini bilir.

Buradan, gerçek verilerin hiçbir zaman silinmediğini görebilirsiniz, sadece hard link (ler) in. Ve diskte yeterince kalabalık olduğunda, veriler başka bir dosyanın verileriyle üzerine yazılabilir. O zamana kadar, silinen dosyadaki veriler kurtarılabilir, ancak sabit bağlantı olmadan bulmak zor olabilir.

Symlinks, daha önce açıklandığı gibi, " <targetname> adında bir klasörde <targetfolder> adında bir dosya var" diyor. Sabit bağlantıya işaret ediyorlar. Verilerin nerede olduğunu bilmiyorlar. Sabit bağlantı bunu biliyor.

    
verilen cevap Gonesoft 01.03.2015 12:28
3

Mükemmel noob -ve- eski Windoze -user- kullanıcı dostu açıklama için güzel diyagramlar ve bir SSS bu sayfaya bakın İşte . Onların telif hakkı kısıtlamaları, onların sözlerini kullanmamı engelliyor. Bu yüzden, buradaki bağlantıyı sağladım.

Bu benim 2 ya da 3'üm, yumuşak / sabit linkli bilmeceyi kavramak, her zaman havluya atmak ve anlayışımı ileride belirsiz bir zaman noktasına ertelemek - açıklamaları ve man sayfaları inode ve tümüyle derinlemesine ve teknik olarak derinlemesine ...

Enjoy!

    
verilen cevap nutty about natty 10.02.2013 17:03
0

Bu çok basit. Dosyalar (ve dizinler!) Blok cihazındaki adreslerde (HDD ya da herneyse) saklanır. Normalde bir adrese eşlenmiş bir adınız vardır ve bu şekilde dosyanızı nasıl alırsınız. Bir sabit bağlantı , aynı adrese eşlenen ikinci, üçüncü, vb. Addır. Bunun yerine sembolik bir bağlantı sembolü - isme - ve ilk isimle eşlenen ikinci bir isimdir. Çekirdek söz konusu olduğunda, sembolik link hedefini okuduktan sonra durur ve dosya adı olarak hedef değerle (daha fazla veya daha az) başlayarak geriye döner, böylece göreceli bağlar mümkündür ancak çılgınca yararsızdır. Hedef adı, kullanıcı alanı kodunda açık bir şekilde sorgulanmış olması dışında dosya sistemi seviyesinin üstünde kullanılmaz.

    
verilen cevap Jim Driscoll 03.07.2016 17:39

Etiketlerdeki diğer soruları oku