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 duve dfaynı zamanda 1024, lssadece onlarla oluşur seçti. İçin olsa duve dfo POSIX standardına bunu bir çelişki olduğu (yani burada ortam değişkeni POSIXLY_CORRECTgeliyor). 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.
statKomut basitçe tarafından sağlanan bilgileri görüntüleyen statsistem ç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 lskomutu) Linux çekirdeği (dolayısıyla bir parçası değildir statçağrı), farklı sistem yönünü hedefliyorsanız GNU coreutilsdaha 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 .