GNU/Linux >> Znalost Linux >  >> Linux

Jaký je celkový součet na prvním řádku po ls -l?

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 na ls , 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 na stat nebo fstat . 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 a physical_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.


Linux
  1. Jak vložit text před první řádek souboru?

  2. Jak zastavit příkaz Najít po prvním zápase?

  3. Bash přepíše první řádek, výzva k bashu Ps1?

  1. Jaký je význam každého řádku výstupu sestavy C hello world?

  2. Jak získat n-tý řádek po grepovaném řádku?

  3. Příkazový řádek pro návrat do GUI po Ctrl-Alt-F1?

  1. Linux – Co znamená tečka za bity oprávnění souboru?

  2. Jak zjistit, jakou verzi OS X používám z příkazového řádku?

  3. Vrátit pouze část řádku po odpovídajícím vzoru?