Come ottenere la dimensione di un file o di una directory in Linux

Contenuti

Una finestra di terminale Linux su un laptop in stile Ubuntu.

Quando usi Linux du comando, ottenere sia l'utilizzo effettivo del disco che la dimensione effettiva di un file o di una directory. Spiegheremo perché questi valori non sono gli stessi.

Utilizzo effettivo del disco e dimensioni effettive

La dimensione di un file e lo spazio che occupa sul disco rigido raramente sono gli stessi. Lo spazio su disco è allocato in blocchi. Se un file è più piccolo di un blocco, è ancora allocato un blocco completo a causa del fatto che il filesystem non ha un'unità più piccola di immobili da utilizzare.

A meno che la dimensione di un file non sia un multiplo esatto di blocchi, lo spazio che utilizzi sul disco rigido dovrebbe essere sempre arrotondato al blocco intero successivo. Come esempio, se un file ha più di due blocchi ma meno di tre, ci vogliono ancora tre blocchi di spazio per conservarlo.

Vengono utilizzate due misurazioni in relazione alla dimensione del file. Il primo è la dimensione effettiva del file, che è il numero di byte di contenuto che compongono il file. La seconda è la dimensione effettiva del file sul disco rigido. Questo è il numero di blocchi del filesystem necessari per salvare quel file.

Un esempio

Vediamo un semplice esempio. Reindirizzeremo un singolo carattere a un file per creare un piccolo file:

eco "1" > geek.txt

Ora, useremo l'elenco di formati lunghi, ls, per vedere la lunghezza del file:

ls -l geek.txt

La lunghezza è il valore numerico che segue il dave dave Biglietti, che sono due byte. Perché sono due byte quando inviamo un solo carattere al file?? Diamo un'occhiata a cosa succede all'interno del file.

Useremo il hexdump comando, che ci darà un numero esatto di byte e ce lo permetterà “guarda” caratteri non stampabili come valori esadecimali. Useremo anche il -C (canonico) per forzare l'output a visualizzare valori esadecimali nel corpo dell'output, così come i loro equivalenti di caratteri alfanumerici:

hexdump -C geek.txt

L'output ci mostra che, a partire da scroll 00000000 nel file, c'è un byte contenente un valore esadecimale di 31 e uno che contiene un valore esadecimale di 0A. La parte destra dell'output mostra questi valori come caratteri alfanumerici, ogni volta che è fattibile.

Il valore esadecimale di 31 è usato per rappresentare la cifra uno. Il valore esadecimale di 0A viene utilizzato per rappresentare il carattere di avanzamento riga, che non può essere visualizzato come carattere alfanumerico, quindi mostra come un punto (.) Anziché. Il carattere di avanzamento riga viene aggiunto tramite echo . Predefinito, echoinizia una nuova riga dopo aver mostrato il testo che devi digitare nella finestra del terminale.

Ciò concorda con l'output di ls e concorda con la lunghezza del file a due byte.

IMPARENTATO: Come usare il comando ls per elencare file e directory in Linux

Ora, useremo il du comando per visualizzare la dimensione del file:

du geek.txt

Diciamo che la taglia è quattro, ma quattro di cosa??

Ci sono blocchi e poi ci sono blocchi

quando du riporta le dimensioni dei file in blocchi, la dimensione che usi dipende da diversi fattori. Puoi specificare la dimensione del blocco da usare sulla riga di comando. Se non forza du per usare una particolare dimensione del blocco, segui una serie di regole per scegliere quale usare.

Primo, controlla quanto segue variabili ambientali:

  • DU_BLOCK_SIZE
  • MISURA DEL BLOCCO
  • MISURA DEL BLOCCO

Se uno di questi esiste, la dimensione del blocco è impostata e du smettila di controllare. Se nessuno è impostato, du per impostazione predefinita ha una dimensione del blocco di 1024 byte. Salvo che, In altre parole, una variabile d'ambiente chiamata POSIXLY_CORRECT È stabilito. Se è il caso, du per impostazione predefinita ha una dimensione del blocco di 512 byte.

Quindi, Come facciamo a sapere quale è in uso?? Puoi controllare ogni variabile d'ambiente per risolverla, ma c'è un modo più veloce. Confrontiamo i risultati con la dimensione del blocco utilizzata dal file system.

Per scoprire la dimensione del blocco utilizzata dal file system, useremo il tune2fs Programma. Quindi useremo il -l (lista dei superblocchi), convogliare l'uscita attraverso grep, e successivamente stampa righe contenenti la parola “Bloccare”.

In questo esempio, vedremo il file system sulla prima partizione del primo hard disk, sda1, e dovremo usare sudo:

sudo tune2fs -l /dev/sda1 | blocco grep

La dimensione del blocco del file system è 4096 byte. Se lo dividiamo per il risultato che abbiamo ottenuto da du (quattro), mostra il du la dimensione del blocco predefinita è 1.024 byte. Ora sappiamo diverse cose importanti.

Primo, sappiamo che la più piccola quantità di spazio nel filesystem che può essere dedicata alla memorizzazione di un file è 4096 byte. Ciò significa che anche il nostro piccolo file di due byte occupa 4 KB di spazio su disco rigido.

La seconda cosa a cui prestare attenzione sono le applicazioni dedicate alla reportistica su file system e statistiche del disco fisso, Che cosa du, ls, e tune2fs, può avere nozioni diverse di cosa significhi “bloccare”. il tune2fs l'applicazione riporta le dimensioni effettive dei blocchi del filesystem, mentre ls e du può essere impostato o forzato a utilizzare altre dimensioni di blocco. Queste dimensioni dei blocchi non sono destinate a essere correlate alla dimensione del blocco del file system; sono giusti “frammenti” che quei comandi usano nel loro output.

Finalmente, durante l'utilizzo di blocchi di dimensioni diverse, le risposte di du e tune2fs trasmettere lo stesso significato. il tune2fs Il risultato è stato un blocco di 4096 byte, e il du il risultato è stato quattro blocchi di 1.024 byte.

Usando du

Nessuna opzione o parametro della riga di comando, du elenca lo spazio totale su disco utilizzato dalla directory corrente e da tutte le sottodirectory.

Diamo un'occhiata a un esempio:

di

La dimensione è riportata nella dimensione del blocco predefinita di 1024 byte per blocco. L'intero albero delle sottodirectory viene attraversato.

Usando du in una directory diversa

Se fai finta du per segnalare su una directory diversa da quella corrente, puoi passare il percorso alla directory sulla riga di comando:

tu ~/.cach/evolution/

Usando du in un file specifico

Se fai finta du per riferire su un file specifico, passare il percorso a quel file sulla riga di comando. Inoltre puoi passare un modello di shell per scegliere un gruppo di file, Che cosa *.txt:

du ~ / .bash_alias

Rapporti sui file nelle directory

Avere du rapporto sui file nella directory e nelle sottodirectory correnti, Utilizzare il -a (Tutti i file) opzione:

du -a

Per ogni directory, viene riportata la dimensione di ogni file, così come il totale di ogni directory.

Limitare la profondità dell'albero delle directory

Si può dire du per enumerare l'albero delle directory a una certa profondità. Per farlo, usa el -d (Massima profondità) e fornire un valore di profondità come parametro. Si noti che tutte le sottodirectory vengono scansionate e utilizzate per calcolare i totali riportati, ma non tutti sono elencati. Per determinare una profondità di directory massima di un livello, usa questo comando:

du -d 1

L'output elenca la dimensione totale di quella sottodirectory nella directory corrente e fornisce anche un totale per ciascuna.

Per elencare le directory di un livello più in profondità, usa questo comando:

du -d 2

Impostazione della dimensione del blocco

Puoi usare il block opzione per determinare una dimensione del blocco per du per il funzionamento in corso. Per utilizzare una dimensione di blocco di un byte, usa il seguente comando per ottenere le dimensioni esatte delle directory e dei file:

tu --block = 1

Se vuoi usare una dimensione del blocco di un megabyte, puoi usare il -m (megabyte) opzione, che è lo stesso di --block=1M:

stupido

Se vuoi che le dimensioni siano riportate nella dimensione del blocco più appropriata in base allo spazio su disco utilizzato dalle directory e dai file, usa el -h opzione (leggibile dagli umani):

tu hai

Per visualizzare la dimensione apparente del file invece della quantità di spazio su disco utilizzato per salvare il file, Utilizzare il --apparent-size opzione:

du --dimensione-apparente

Puoi combinare questo con il -a (Tutto quanto) opzione per vedere la dimensione apparente di ogni file:

du --dimensione-apparente -a

Ogni file è elencato, insieme alla sua dimensione apparente.

Visualizzazione solo dei totali

Se fai finta du riportare solo il totale della directory, Utilizzare il -s (ricapitolare) opzione. Puoi anche combinare questo con altre opzioni, Come la -h opzione (leggibile dagli umani):

du -h -s

Qui, lo useremo con il --apparent-size opzione:

du --dimensione-apparente -s

Visualizzazione tempi di modifica

Per vedere la data e l'ora di creazione o ultima modifica, Utilizzare il --time opzione:

du --time -d 2

Risultati strani?

Se vedi risultati strani da du , soprattutto quando si incrociano le dimensioni di riferimento con l'output di altri comandi, in generale è dovuto alle diverse dimensioni dei blocchi a cui possono essere configurati diversi comandi o a quelli a cui sono predeterminati. Potrebbe anche essere dovuto a differenze tra le dimensioni effettive dei file e lo spazio su disco necessario per archiviarli..

Se hai bisogno di abbinare l'output di altri comandi, sperimentalo --block opzione in du.

impostaTimeout(funzione(){
!funzione(F,B,e,v,n,T,S)
{Se(f.fbq)Restituzione;n=f.fbq=funzione(){n.callMethod?
n.callMethod.apply(n,argomenti):n.queue.push(argomenti)};
Se(!f._fbq)f._fbq = n;n.push=n;n.loaded=!0;n.version='2.0′;
n.coda=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];
s.parentNode.insertBefore(T,S) } (window, documento,'copione',
'https://connect.facebook.net/en_US/fbevents.js');
fbq('dentro', '335401813750447');
fbq('traccia', 'Visualizzazione della pagina');
},3000);

Iscriviti alla nostra Newsletter

Non ti invieremo posta SPAM. Lo odiamo quanto te.