(Hmm: aşağıdakiler şimdi biraz epik ...)
Unix dosya sistemlerinde dizinin tasarımı ( tipik olarak mutlaka unix işletim sistemlerine bağlı olması gerekmeyen), aslında gerekli olan özel durumların sayısını azaltan harika bir içgörüyü temsil eder.
Bir 'dizin' gerçekten sadece dosya sistemindeki bir dosyadır. Dosya sistemindeki tüm dosyaların içeriği inode cinsindendir (sorunuzdan, bazı şeylerin zaten farkında olduğunuzu görebiliyorum). Diskteki inodelarda hiçbir yapı yoktur - bunlar sadece disk üzerine yer fıstığı yağı gibi yayılmış büyük bir grup byte bloğudur. Bu kullanışlı değildir ve gerçekten de aklı başında bir derneği olan herkese karşı iticidir.
Sadece özel bir düğüm (Geleneği nedeniyle değil, 0 veya 1,) düğüm sayısı 2 olduğu; inode 2 bir dizin dosyasıdır: kök dizin . Sistem dosya sistemini monte ettiğinde, kendisini başlatmak için inode 2'yi okumak zorunda olduğunu 'bilir'.
Bir dizin dosyası sadece bir dosyadır, opendir (3) ve arkadaşları tarafından okunması amaçlanan dahili bir yapıya sahiptir. İç yapısını dir (5) belgesinde görebilirsiniz (işletim sisteminize bağlı olarak); Buna bakarsanız, dizin dosyası girişinin dosya hakkında neredeyse hiçbir bilgi içermediğini göreceksiniz - hepsi dosya kodunda. Bu dosya için özel olan birkaç şeyden biri, yazma işlemini mümkün kılan modlu bir dizin dosyasını açmaya çalışırsanız, open (2) fonksiyonunun bir hata vermesidir. Diğer bazı komutlar (sadece bir örnek seçmek için hexdump
), dizin dosyalarıyla normal şekilde davranmayı reddedecektir, çünkü sadece yapmak istediğin şey bu değildir (ama bu onların özel durumu, dosya sisteminin değil).
Bir sabit bağlantı bir dizin dosyasının haritasında bir girişin daha başka bir şey, ne de daha azdır. Böyle bir haritada, her ikisinin de aynı inode numarasına eşlendiği iki (veya daha fazla) girişiniz olabilir: bu nedenle inode'un iki (veya daha fazla) sabit bağlantısı vardır. Bu aynı zamanda her bir dosyada neden en az bir 'hard link' bulunduğunu açıklar . Inode, bir inode dosyasının dosya sistemindeki herhangi bir yerde bir dizin dosyasında kaç kez bahsedildiğini kaydeden bir referans sayısına sahiptir (bunu yaparken gördüğünüz sayıdır ls -l
).
Tamam: Şimdi konuya geliyoruz.
Dizin dosyası, sayıların (inode numaralarının) dizeleri ('dosya adları') haritasıdır. Bu inode sayıları, o dizinde bulunan dosyaların inode sayılarıdır. Bu dizinde bulunan dosyalar diğer dizin dosyalarını içerebilir, bu yüzden inode numaraları dizinde listelenenlerin arasında olacaktır. Bu nedenle, bir dosyanız varsa /tmp/foo/bar
, o zaman dizin dosyası foo
için bir girdi içerir; bar
bu dizgiyi bu dosyanın inode'uyla eşleştirir. Ayrıca /tmp
dizinde foo
'içinde' olan dizin dosyası için dizin dosyasında bir giriş vardır /tmp
.
Mkdir (2) ile bir dizin oluşturduğunuzda, bu işlev
- doğru iç yapıya sahip bir dizin dosyası (bazı inode numaraları ile) yaratır,
- ana dizine bir giriş ekleyerek yeni yönetmenin adını bu yeni düğüme eşler (bağlantılardan birini oluşturur),
- 'dizini eşleyerek yeni dizine bir giriş ekler. aynı inode'a (bu diğer linke ait hesaplar) ve
- yeni dizine başka bir giriş ekler, '..' dizesini adım (2) 'de değiştirdiği dizin dosyasının inode'uyla eşleştirir (bu, alt dizinleri içeren dizin dosyalarında göreceğiniz daha fazla sayıda sabit bağlantıyı hesaba katar) ).
Sonuçta (neredeyse) sadece özel durumlar şöyledir:
- Open (2) işlevi, dizin dosyalarını yazmak için açmanızı önleyerek, ayağınızı vurmanızı zorlaştırmaya çalışır.
- Mkdir (2) işlevi, yeni dosya dizinine birkaç ekstra giriş ekleyerek ('.' Ve '..') işleri tamamen güzel ve kolay hale getirir, sadece dosya sisteminde dolaşmayı elverişli kılar. Dosya sisteminin '' olmadan 'mükemmel çalışacağından şüpheleniyorum. ve '..', fakat kullanmak acı verici olurdu.
- Dizin dosyası, 'özel' olarak işaretlenen birkaç dosya türünden biridir - bu gerçekten açık (2) gibi şeylerin biraz farklı davranmasını söyleyen şeydir. Bkz
st_mode
stat (2).
(2011-10-20 yığınındaki orijinal sorudan kopyalandı)
..
sabit bağları da ağaç yürüme yazılım zaten olması gerekir "üst dizin bağlantısı olan yok döngüleri" istisnalar, bu yüzden biraz dışında da karmaşıklığı eklenir.
linke.