Bir dizinin boyutu 'ls -l' komutunun çıktısında ne anlama gelir?


Yanıtlar:


45

Bu, dizindeki meta bilgisini (yani bu dizine ait olan dosyaların tablosu) depolamak için kullanılan diskteki alanın boyutudur. Yani, 1024 ise, bunun için diskteki 1024 baytın (her zaman tam bloklar ayırması) bu amaç için kullanıldığı anlamına gelir.


3
ve bir dizin binlerce dosya içerdiğinde, dizinin kendisinin boyutu kolayca> 10KB olabilir
glenn jackman

1
@txwikinger Dizinlerin, gerçek dosya adlarını değil, inode listelerini içerdiğini düşünüyorum.
Ярослав Рахматуллин

6
@ ЯрославРахматуллин Bir dizin girişi bir inode numarası ve bir dosya adından oluşur.
200_success

2
Yani bir dir '"size" sadece dosyaların içindeki dosya sayısı ile ilişkilidir?
Lee,

1
@Lee: Evet, doğru.
kedi

14

Basılı "dizinin boyutu" ls -l(herhangi bir dosya türünde olduğu gibi) stat()çağrı tarafından bildirilen değerdir statbuf.st_size.

Bunun st_sizedizinler için anlamı, tamamen dosya sistemi türüne bağlıdır. Dosya sistemi türünü bilmediğiniz ve kavramlarını anlamadığınız sürece, içindeki değerden hiçbir şey çıkaramazsınız st_size.

  • Şu anda genellikle adlandırılan tarihi UNIX dosya sisteminde v7-fs, dizinler, 16 bit inode numarası ve 14 bayt dosya adı içeren 16 bayt girişleri tekrar edildi. Bir dizinin "boyutu" read(2)işlem açısından anlamlıdır ve her zaman olduğu gibi büyür veya kalır. .Ve ..girişleri elle akım ve bir seviye yukarıda dizine karşı onları sert bağlama tarafından oluşturulur. Aklı başında bir boş kızlık dizininin bağlantı sayısı 2'dir.

  • 1989'dan beri (SVr4) çağrıldığı BSD-4.2 dosya sisteminde ufs, dizinler kararlı olmaları için verilmeyen bir format kullanan bir dizi değişken uzunluklu kayıtlardır, bu nedenle kullanıcı alanı komutlarının bu formatı okumasına izin verilmez. Bildirilen "boyut", v7-fs'deki gibi bayt cinsinden boyuttur; boyut genellikle olduğu gibi büyür veya kalır, ancak dosya sisteminin yeni sürümleri bazı koşullar altında boyutu küçültebilir - ancak bunu her zaman beklediğiniz zaman değil. Boş bir dizin için bildirilen bağlantı sayısı, olduğu gibi 2'dir v7-fs.

  • Gelen WOFSdizinleri hep "boyutu" 0 rapor ve kullanma okunabilir içeriğin türünü asla, dosya sistemi, ben tasarlanmış ve 1988 yazında Mayıs 1991 tarihleri arasında uygulanan read(2)çağrıyı. Bunun nedeni WOFS, ilk Yere Yazma dosya sistemidir ve WOFSdosyalarda dizini bildirmek yerine bulundukları dizini bildirdikleri içindir. Bir WOFSdizini kullanarak okursanız readdir(), yalnızca amaçlanan girişler için veri alırsınız, ancak hiçbir zaman .ve ... Boş bir dizinin bağlantı sayısı WOFS1'dir ve tüm davranış tamamen POSIX uyumludur.

  • Bu ZFS, WOFSmakaleleri okuduktan sonra uygulandı . ZFSyazılan bir dosya sistemidir ve yazarları kavramları kopyaladıklarını inkar etmez WOFS. ZFS üzerinde Dizinler rapor number of directory entriesin st_size, yani bildirilen "boyutu" dizin verilerinden işgal disk alanı ile ilgili olarak hiçbir gerçek anlamı yoktur. Bir ZFS dizininde giriş .ve ..giriş yoktur , ancak ararsanız readdir(), bu girişlere numara verilir ve ilk iki işlem için döndürülür. ZFS, listedeki sabit bağlantı dizinlerini desteklemeyen tek FS'dir, ancak dizinler için bildirilen bağlantı sayısı her zaman 2'dir. ZFS'deki bu iki düzensizlik, POSIX tarihi olmayan programlarda karışıklığı azaltmak için uygulanır.

  • ZFS benzer şekilde, WAFL kopyalar bazı tümünü değil fikirler WOFS. Netapp's WAFL, WOFSmakalenin yayınlanmasından 3 yıl sonra yazıldı , WAFL kopyalanıp kopyalandı, ancak WAFL, dizinin içeriği olduğu varsayımı altında "gerçek dizin boyutu" olabilecek "boyut" değerlerini rapor ediyor gibi görünüyor.


13

Bir dizin kendisi ve içeriği hakkında meta-veri için en az 4096 bayt (en az) ayırır.

Ayrıca, 4096 bayt, ext2 / ext3 / ext4 dosya sistemi için varsayılan tahsisat birimidir (blok) ve bunun için bir dizin daha küçük olamaz.

Farklı dosya sistemlerinde, dosya sisteminin varsayılan blok boyutundan dolayı farklı varsayılan boyutlarda dizinler bulabilirsiniz.

Dizin boyutları dolduruldukça dinamik olarak da büyüyebilir, ancak bir kez doldurulduğunda meta veriler için ayrılan alan dizini kaldırmadan yeniden tahsis edilemez.


1
Hangi meta-veriden bahsediyorsun?
Stéphane Chazelas

1
Ayrıntılar dosya sistemine bağlıdır ancak genellikle dosya adı, inode numarası, dosya türü (dosya, dir, fifo, soket, aygıt düğümü, sembolik bağlantı, vb.), sahip, grup, izinler, öznitelikler, ACL'ler, sembolik bağlantı hedefleri gibi meta verileri içerir.
cas

6
@CraigSanders, dizin sadece nesne adını ve karşılık gelen inode numarasını içerir . Inode, nesne türü, sahip / grup, izinler, ACL'lerin ve genişletilmiş özniteliklerin nerede olduğu referansını içerir, ... Başka bir şey POSIX dosya sistemi anlambiliminin ciddi şekilde bozulmasına neden olur.
vonbrand

UFS'im, dizin başına kendi meta verileri için yalnızca 512 bayt ayırıyor.
FUZxxl

4

Rehber, telefon rehberi gibi sadece bir dizindir. Bu sadece sayılar listesi ve yanlarında bir isim bulunan bir dosyadır. Her sayı dosya sistemindeki bir dosyaya (inode numarası) atıfta bulunur ve adı dosya adıdır.

Bu verileri kaydetmek için disk alanına ihtiyacınız vardır, nasıl tahsis edildiğini ve büyütüldüğünü ve küçültüldüğünü dosya sistemine bağlıdır.


Hangi meta-verilerin tutulduğunun gerçek ayrıntılarını ve büyüklük artışına ilişkin blok tahsisat hususlarını dahil edebilirsiniz. zaten verilen güzel alegori ile daha kesin bir cevap verecektir. :)
n611x007

3
@ naxa, bu dosya sistemine bağlıdır ve hatta hangi seçenekleri etkinleştirdiğinize bağlı olan bir dosya sistemi içinde (ext4 gibi), bu yüzden onu denemek ve yorucu olmayacak şekilde "dosya sistemine bağlı" olarak bırakmayı tercih ederim. bu soru ile alakalı.
Stéphane Chazelas
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.