Definici tohoto řádku najdete v ls
dokumentaci pro vaši platformu. Pro coreutils
ls
(ten, který se nachází na mnoha systémech Linux), informace lze nalézt pomocí info coreutils ls
:
U každého adresáře, který je uveden, uveďte před soubory řádek „celkem BLOCKS“, kde BLOCKS je celková alokace disku pro všechny soubory v daném adresáři.
Vzorec:Co je to číslo?
celkem int =Součet (fyzických_bloků_v_použití) *velikost_fyzického_bloku/velikost_ls_bloku) pro každý soubor.
Kde:
ls_block_size
je libovolná proměnná prostředí (normálně 512 nebo 1024 bajtů), který je volně upravitelný pomocí--block-size=<int>
příznak nals
,POSIXLY_CORRECT=1
Proměnná GNUenvironment (pro získání 512bajtových jednotek) nebo-k
příznak pro vynucení jednotek 1 kB.physical_block_size
je hodnota rozhraní interního bloku závislá na OS, která může nebo nemusí být připojena k základnímu hardwaru. Tato hodnota je normálně 512b nebo 1k, ale je zcela závislá na OS. Může být odhalen pomocí%B
hodnota nastat
nebofstat
. Upozorňujeme, že tato hodnota (téměř vždy) nesouvisí s počtem fyzických bloků na moderním paměťové zařízení.
Proč tak matoucí?
Toto číslo je poměrně oddělené od jakékoli fyzické nebo smysluplné metriky. Mnoho mladých programátorů nemá zkušenosti s dírami v souborech nebo pevnými/sym odkazy. Navíc dostupná dokumentace k tomuto konkrétnímu tématu prakticky neexistuje.
Nesouvislost a nejednoznačnost pojmu "velikost bloku" je výsledkem mnoha různých opatření, která lze snadno zaměnit, a relativně hluboké úrovně abstrakce točící se kolem přístupu k disku.
Příklady konfliktních informací:du
(nebo ls -s
) vs stat
Spuštění du *
ve složce projektu přináší následující:(Poznámka:ls -s
vrátí stejné výsledky.)
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
Celkem :2+2+1+3+3+5+26+4+2+14 =62 bloků
Přesto, když člověk spustí stat
vidíme jiný soubor hodnot. Spuštěn stat
ve stejném adresáři vede:
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
Celkem: 3+3+1+5+6+10+51+8+3+28 =118 bloků
Poznámka: Můžete použít příkaz
stat * --printf="%b\t(%B)\t%n: %s bytes\n"
> pro výstup (v pořadí) počet bloků, (v závorkách) velikost těchto bloků, název souboru a velikost v bajtech, jak je uvedeno výše.
Jsou zde dvě důležité věci:
stat
hlásí oběphysical_blocks_in_use
aphysical_block_size
jak je použito ve vzorci výše. Všimněte si, že se jedná o hodnoty založené na rozhraních OS.du
poskytuje to, co je obecně přijímáno jako poměrně přesný odhad využití fyzického disku.
Pro informaci zde je ls -l
adresáře výše:
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
To je celkový počet bloků systému souborů, včetně nepřímých bloků, které používají uvedené soubory. Pokud spustíte ls -s
na stejných souborech a sečtením nahlášených čísel dostanete stejné číslo.