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_size
Bir 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=1
GNU ortam değişkeni, ya da (512 bayt birimleri elde etmek için) -k
1 KB birimleri zorlamak için bayrak.
physical_block_size
temel 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 .stat
fstat
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 -s
aynı 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 stat
farklı bir değerler kümesi görürüz. stat
Aynı 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:
stat
raporları hem physical_blocks_in_use
ve physical_block_size
yukarıdaki formülde kullanıldığı haliyle. Bunların işletim sistemi arayüzlerine dayalı değerler olduğunu unutmayın.
du
genel olarak kabul edilen fiziksel disk kullanımının oldukça doğru bir tahminini sağlamaktır.
Referans için, ls -l
yukarı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 ls
benim sistemimde bu satırdan bahsetmiyor, amainfo coreutils ls
yapıyor. Nasıl geliyorman ls
veinfo coreutils ls
aynı komutla ilgili farklı bilgiler var mı? Nedenls
sadece 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.