Yeni bir dizine neden herhangi bir şey eklenmeden önce sert bir bağlantı sayısı 2 olsun?


38

Sadece newDirectory dizini yarattım ve sonra ls -ld komutunu yapıyorum. Sabit bağlantıların sayısının 2 olduğunu görüyorum. Sabit bağlantıyı 2 en baştan tam olarak yapan nedir? Ayrıca, geçerli dizindeki alt dizinlerin sayısı, sabit bağlantıların sayısına eşit mi - 2?


Yanıtlar:


39

Tarihsel olarak , ilk Unix dosya sistemi her dizinde iki girdi yarattı: .dizinin kendisine ve ..üst öğelerine işaret etti. Bu, hem uygulamalar hem de işletim sisteminin kendisi için dosya sistemini geçmek için kolay bir yol sağladı.

Böylece, her bir dizinin link sayısı 2 + n'dir, burada n, alt dizinlerin sayısıdır. Bağlantılar, bu dizinin üst kısmındaki .girdi, yönetmenin kendi girişi ve ..her alt dizindeki girdidir. Örneğin, bunun /parenttüm dizinlere dayanan alt ağacın içeriği olduğunu varsayalım :

/parent
/parent/dir
/parent/dir/sub1
/parent/dir/sub2
/parent/dir/sub3

Sonra dir5 bir bağlantı sayısına sahip: dirgirişi /parent, .girişin /parent/dirve üç ..her girdileri /parent/dir/sub1, /parent/dir/sub2ve /parent/dir/sub3. Yana /parent/dir/sub1hiçbir alt dizini vardır, onun bağlantı sayısı 2 (olduğu sub1giriş /parent/dirve .giriş içinde /parent/dir/sub1).

“Uygun” bir ebeveyne sahip olmayan kök dizinin özel muhafaza miktarını en aza indirmek için, kök dizin ..kendisine işaret eden bir giriş içerir . Bu şekilde de 2 link sayısının artı alt dizin sayısının 2 olması /.ve /...

Daha sonra dosya sistemleri üst dizinleri bellekte tutma eğilimindeydiler ve genellikle gerçek girdiler olarak ihtiyaç duymuyorlar .ve ..var oluyorlardı; tipik modern unix sistemleri , dosya tipi bağımsız dosya sistemi kodunun bir parçası olarak .ve ..özel değerler olarak değerlendirilir. Bazı dosya sistemleri hala içerir .ve ..giriş yapar veya diskte hiçbir şey görünmese bile taklit eder.

Çoğu dosya sistemleri hala bakılmaksızın ait + n dizinleri için 2 'lik bir bağlantı sayısını rapor .ve ..kayıtlar mevcut olmakla birlikte istisnalar bu yapmaz örnek Btrfs için vardır.


4
..üste işaret etmek, geçerli dizinin bağlantı sayısını etkilemez. 2 sayısı .ve yönetmenin (orijinal) ismi listeleniyor. Bunu anlatma biçimin biraz belirsiz ve sanki kulağa .ve ..iki. ..sadece matematiğin nasıl işlediğini açıklamak için kullanılmalıdır 2+n:)
th3an0maly

@ th3an0maly Ebeveyne işaret etmek, ebeveynin link sayısını etkiler. “Her alt dizinde bulunan ..” girişinin belirsiz olduğunu gerçekten anlamıyorum ve “müdürün isminin listelenmesi” ile ne demek istediğinizi anlamıyorum.
Gilles 'SO- kötülük olmayı bırak'

Aslında, bu cevap: unix.stackexchange.com/a/101516/160264 tam olarak benim de bahsettiğim şey. Cevabını okuduktan sonra oku, çünkü seninki zirvede.
th3an0maly

@ th3an0maly Hala ne anlama geldiğine dair hiçbir fikrim yok. İpuçları yerine açıkça ifade eder misiniz?
Gilles 'SO- kötülük yapmayı bırak'

@ goldilocks'ın cevabı açıktır. Söylemek istediğim, cevabın onun gibi olabileceği. Ama sonra cevabını okurken cevabını okumamıştım. İlk satır tam olarak orjinal yorumumun söylediği: "Dizinin kendisi için bir tane ve .içinde bir tane var." Senin için hala belirsizse, çok özür dilerim, daha fazla netleştiremiyorum. Tek yapabileceğim tek şey kopyaya + cevabını yorumlara buraya yapıştırmak.
th3an0maly

13

Dizinin kendisi için bir tane, .içinde de bir tane var.

Ayrıca, geçerli dizindeki alt dizinlerin sayısı, sabit bağlantıların sayısına eşit mi - 2?

Bu, her alt dizinde bir ..hardlink oluşturduğundan , bunun ötesinde, dizinlere hardlinks oluşturamazsınız. 1 Ancak, ciddi bir şey için buna güvenmem, esp. alt dizinleri saymak ve gerçek sayıyı almak kolaydır.

Eğer lskaç tane denizaltının olduğu hakkında bir fikre bakıyorsanız, bu size iyi bir fikir verir.

1 Veya en azından birlikte yapamazsınız ln. Programlı olarak denemedim ve man 2 linkbelirsizim - uygulanabilecek bir çift olmasına rağmen, bir dizine bağlantı için bariz bir hata yok ( EMLINK, EPERM). Bu nedenle, bir dizine tek olası bağlantıların olduğunu söyleyen bir yerlerde bir standart olmadığı sürece .ve ..yine, bu bağlantı linkini sıradan bir ipucu olarak kabul ediyorum.


2
Dizinlere olan bağlantılara izin verilip verilmediği ve bağlantı sayısından alt dizinleri sayıp sayamayacağınız, her ikisi de kullandığınız dosya sistemine bağlıdır - bazıları izin verir, bazıları kullanmaz.
alanc

MacOS'un Time Machine'in dizinleri önceki yedeklere bağladığını unutmayın; Bu şekilde, her artımlı yedeklemenin tam bir kopya olduğunu iddia edebilirler ve diğerlerini etkilemeden artımlı herhangi birini silebilirler. Aynı zamanda çok kırılgan, normal sistemler kullanarak oynuyordum ve dosya sistemimi tamamen temizledim.
w00t
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.