Formül: Bu sayı nedir?
toplam int = Her dosya için (Physical_blocks_in_use) * Physical_block_size / ls_block_size) toplamı .
Nerede:
ls_block_sizeBir olan rasgele değişkeni serbestçe değiştirilebilir olduğunu (normal olarak 512 ya da 1024 byte)
--block-size=<int>bayrağa ls, POSIXLY_CORRECT=1GNU ortam değişkeni, ya da (512 bayt birimleri elde etmek için) -k1 KB birimleri zorlamak için bayrak.
physical_block_sizetemel donanıma bağlı olabilecek veya olmayabilecek dahili bir blok arayüzünün işletim sistemine bağlı değeridir. Bu değer normalde 512b veya 1k'dır, ancak tamamen işletim sistemine bağlıdır. Veya %Büzerindeki değer aracılığıyla ortaya çıkarılabilir . Bu değerin (hemen hemen her zaman) modern bir depolama cihazındaki fiziksel blok sayısıyla ilgisi olmadığını unutmayın .statfstat
Neden bu kadar kafa karıştırıcı?
Bu sayı, herhangi bir fiziksel veya anlamlı ölçümden oldukça farklıdır. Birçok genç programcının dosya delikleri veya sabit / sym bağlantıları konusunda deneyimi olmamıştır . Ek olarak, bu belirli konu ile ilgili mevcut dokümantasyon hemen hemen mevcut değildir.
"Blok boyutu" teriminin ayrıklığı ve belirsizliği, kolayca karıştırılan çok sayıda farklı önlemin ve disk erişimi etrafında dönen nispeten derin soyutlama seviyelerinin bir sonucudur.
Çelişkili bilgi örnekleri: du(veya ls -s) vsstat
du *Bir proje klasöründe çalıştırmak aşağıdakileri verir: (Not: ls -saynı sonuçları verir.)
dactyl:~/p% du *
2 check.cc
2 check.h
1 DONE
3 Makefile
3 memory.cc
5 memory.h
26 p2
4 p2.cc
2 stack.cc
14 stack.h
Toplam : 2 + 2 + 1 + 3 + 3 + 5 + 26 + 4 + 2 + 14 = 62 Blok
Yine de biri koştuğunda statfarklı bir değerler kümesi görürüz. statAynı dizinde çalıştırmak şu sonuçları verir:
dactyl:~/p% stat * --printf="%b\t(%B)\t%n: %s bytes\n"
3 (512) check.cc: 221 bytes
3 (512) check.h: 221 bytes
1 (512) DONE: 0 bytes
5 (512) Makefile: 980 bytes
6 (512) memory.cc: 2069 bytes
10 (512) memory.h: 4219 bytes
51 (512) p2: 24884 bytes
8 (512) p2.cc: 2586 bytes
3 (512) stack.cc: 334 bytes
28 (512) stack.h: 13028 bytes
Toplam: 3 + 3 + 1 + 5 + 6 + 10 + 51 + 8 + 3 + 28 = 118 Blok
Not:stat * --printf="%b\t(%B)\t%n: %s bytes\n" Yukarıda gösterildiği gibi,> komutunu kullanarak blok sayısını (sırayla), bu blokların boyutunu, dosyanın adını ve bayt cinsinden boyutu verebilirsiniz .
İki önemli şey var:
statraporları hem physical_blocks_in_useve physical_block_sizeyukarıdaki formülde kullanıldığı haliyle. Bunların işletim sistemi arayüzlerine dayalı değerler olduğunu unutmayın.
dugenel olarak kabul edilen fiziksel disk kullanımının oldukça doğru bir tahminini sağlamaktır.
Referans için, ls -lyukarıdaki dizini burada bulabilirsiniz :
dactyl:~/p% ls -l
**total 59**
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.cc
-rw-r--r--. 1 dhs217 grad 221 Oct 16 2013 check.h
-rw-r--r--. 1 dhs217 grad 0 Oct 16 2013 DONE
-rw-r--r--. 1 dhs217 grad 980 Oct 16 2013 Makefile
-rw-r--r--. 1 dhs217 grad 2069 Oct 16 2013 memory.cc
-rw-r--r--. 1 dhs217 grad 4219 Oct 16 2013 memory.h
-rwxr-xr-x. 1 dhs217 grad 24884 Oct 18 2013 p2
-rw-r--r--. 1 dhs217 grad 2586 Oct 16 2013 p2.cc
-rw-r--r--. 1 dhs217 grad 334 Oct 16 2013 stack.cc
-rw-r--r--. 1 dhs217 grad 13028 Oct 16 2013 stack.h
man lsbenim sistemimde bu satırdan bahsetmiyor, amainfo coreutils lsyapıyor. Nasıl geliyorman lsveinfo coreutils lsaynı komutla ilgili farklı bilgiler var mı? Nedenlssadece bir kez belgelenmiyor? Aynı komut için iki farklı dokümantasyona sahip olmak, başarısızlık için ayarlanmış gibi görünüyor.