Kaynak kodu ve POSIX standardını inceledikten sonra, @ antje-m ve @Gilles'in cevabının çoğunlukla doğru olduğunu söyleyebilirim.
Özet olarak POSIX.1-2008'deki yorumu alıntılamakta fayda var :
512 baytlık birimlerin kullanımı tarihsel bir uygulamadır ve bu POSIX.1-2008 birimindeki ls ve diğer yardımcı programlarla uyumluluğu korur. Bu, dosya sisteminin kendisinin 512 baytlık blokları temel almasını zorunlu kılmaz. Uzlaşma önlemi olarak -k seçeneği eklendi. Standart geliştiriciler tarafından, Sistem V'deki tam tarihsel tutarlılığı (BSD sistemlerinde karışık 512/1024 bayt kullanıma karşı) nedeniyle 512 baytın en iyi varsayılan birim olduğu ve 1024- bayt birimleri iyi bir uzlaşma oldu. Daha mantıklı 1024 bayt miktarını tercih eden kullanıcılar, 512 bayt birimlere dayanan birçok geçmiş komut dosyasını bozmadan df'den df -k'ye kolayca takma ad atabilir.
Blok boyutu için ls -s
:
POSIX , seçenek verilmedikçe varsayılan blok boyutunun uygulama tanımlı olduğunu belirtir -k
.
Uygulanan varsayılan blok boyutu GNU coreutils
ls
şu şekilde tanımlanır GNU gnulib
:
gnulib/lib/human.c
/* The default block size used for output. This number may change in
the future as disks get larger. */
#ifndef DEFAULT_BLOCK_SIZE
# define DEFAULT_BLOCK_SIZE 1024
#endif
eski bir taahhütten geliyor:
commit 96e78d1f64d7c8d2acc5ad27dc3e73b96ae80585
Author: Jim Meyering <jim@meyering.net>
Date: Mon Jun 29 15:23:04 1998 +0000
Taahhüt mesajının kendisi 1024 sayısı hakkında hiçbir şey söylemedi.
Ve blok boyutu kullanılan nota olduğunu du
ve df
aynı zamanda 1024, ls
sadece onlarla oluşur seçti. İçin olsa du
ve df
o POSIX standardına bunu bir çelişki olduğu (yani burada ortam değişkeni POSIXLY_CORRECT
geliyor). Bu GNU ekibinin bir kararı gibi görünüyor, bu tartışma hakkında POSIX wikipedia sayfasına bakınız .
Komuta için stat
.
POSIX standardının bir parçası değildir, ancak sistem çağrısıdır . Ancak blok boyutu birimi standart değildir ( sys_stat.h ):stat
Stat yapısının st_blocks üyesi için birim POSIX.1-2008 içinde tanımlanmamıştır.
stat
Komut basitçe tarafından sağlanan bilgileri görüntüleyen stat
sistem çağırma ve birkaç istisna dışında 512 blok boyutuyla (bunlar Linux olmayan, örneğin HP-UX, IBM AIX vb makro tanımlanan bakınız gnulib/lib/stat-size.h
).
512 sayısı daha tarihsel bir seçim ve bir Linux sözleşmesi.
GNU coreutils
(Dolayısıyla ls
komutu) Linux çekirdeği (dolayısıyla bir parçası değildir stat
çağrı), farklı sistem yönünü hedefliyorsanız GNU coreutils
daha insana (daha kolay okumak için), ve soyut donanım için Linux çekirdeği (dolayısıyla daha yakın donanıma).
Düzenleme: 4096 blok boyutu "IO blok" boyutudur, gerçek fiziksel blok boyutu hala bu soruda açıklandığı gibi 512 Byte muhtemelen .