GNU/Linux >> Linux Esercitazione >  >> Linux

Qual è il totale nella primissima riga dopo ls -l?

Puoi trovare la definizione di quella linea nel ls documentazione per la tua piattaforma. Per coreutils ls (quello che si trova su molti sistemi Linux), le informazioni possono essere trovate tramite info coreutils ls :

Per ogni directory elencata, fai precedere i file da una riga `total BLOCKS', dove BLOCKS è l'allocazione totale del disco per tutti i file in quella directory.


La formula:Cos'è quello numero?

totale int =Somma di (physical_blocks_in_use) * physical_block_size/ls_block_size) per ogni file.

Dove:

  • ls_block_size è una variabile d'ambiente arbitraria (normalmente 512 o 1024 byte) che è liberamente modificabile con il --block-size=<int> flag su ls , il POSIXLY_CORRECT=1 Variabile GNUenvironment (per ottenere unità da 512 byte) o -k flag per forzare unità di 1kB.
  • physical_block_size è il valore dipendente dal sistema operativo di un'interfaccia di blocco interna, che può o meno essere collegata all'hardware sottostante. Questo valore è normalmente 512b o 1k, ma dipende completamente dal sistema operativo. Può essere rivelato attraverso il %B valore su stat o fstat . Tieni presente che questo valore non è (quasi sempre) correlato al numero di blocchi fisici su un moderno dispositivo di archiviazione.

Perché così confusa?

Questo numero è abbastanza distaccato da qualsiasi metrica fisica o significativa. Molti programmatori junior non hanno esperienza con buchi di file o collegamenti hard/sym. Inoltre, la documentazione disponibile su questo specifico argomento è praticamente inesistente.

La disarticolazione e l'ambiguità del termine "dimensione del blocco" è stato il risultato di numerose misure diverse facilmente confuse e dei livelli relativamente profondi di astrazione che ruotano attorno all'accesso al disco.

Esempi di informazioni contrastanti:du (o ls -s ) rispetto a stat

Esecuzione di du * in una cartella di progetto restituisce quanto segue:(Nota:ls -s restituisce gli stessi risultati.)

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

Totale :2+2+1+3+3+5+26+4+2+14 =62 blocchi

Tuttavia, quando si esegue stat vediamo un diverso insieme di valori. Esecuzione di stat nella stessa directory produce:

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

Totale: 3+3+1+5+6+10+51+8+3+28 =118 blocchi

Nota: Puoi usare il comando stat * --printf="%b\t(%B)\t%n: %s bytes\n"> per emettere (in ordine) il numero di blocchi, (in parentesi) la dimensione di quei blocchi, il nome del file e la dimensione in byte, come mostrato sopra.

Ci sono due cose importanti da asporto:

  • stat riporta sia il physical_blocks_in_use e physical_block_size come usato nella formula sopra. Tieni presente che questi sono valori basati sulle interfacce del sistema operativo.
  • du sta fornendo ciò che è generalmente accettato come una stima piuttosto accurata dell'utilizzo del disco fisico.

Per riferimento, ecco il ls -l della directory sopra:

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

Questo è il numero totale di blocchi del file system, inclusi i blocchi indiretti, utilizzati dai file elencati. Se esegui ls -s sugli stessi file e sommando i numeri riportati otterrai lo stesso numero.


Linux
  1. Linux:cosa significa un punto dopo i bit di autorizzazione del file?

  2. Qual è il significato di ciascuna riga dell'output dell'assieme di un ciao mondo?

  3. Cosa fa qui il '-' (trattino) dopo i nomi delle variabili?

  4. Cosa significa il simbolo di una freccia (->) sulla riga di comando?

  5. Come ottenere l'ennesima riga dopo una presa?

Cosa significa e commerciale alla fine di una riga di script di shell?

Come dividere un file e mantenere la prima riga in ciascuno dei pezzi?

Cosa fa la riga '!/bin/sh -e'?

Omissione della prima riga da qualsiasi output di comando Linux

Come differenziare solo la prima riga di due file?

Qual è l'utilità della riga di comando del DNS inverso?