Come Ottenere la Dimensione di un File o di una Directory in Linux

  • Dave McKay

    @TheGurkha

  • 19 dicembre 2019, 8:00 EDT
Fatmawati Achmad Zaenuri/

Quando si utilizza Linux du comando, è possibile ottenere sia l’effettivo utilizzo del disco e la vera dimensione di un file o di una directory. Spiegheremo perché questi valori non sono gli stessi.

Utilizzo effettivo del disco e dimensione reale

Le dimensioni di un file e lo spazio che occupa sul disco rigido sono raramente le stesse., Lo spazio su disco è allocato in blocchi. Se un file è più piccolo di un blocco, un intero blocco è ancora allocato perché il file system non dispone di un’unità immobiliare più piccola da utilizzare.

A meno che la dimensione di un file non sia un multiplo esatto di blocchi, lo spazio che utilizza sul disco rigido deve sempre essere arrotondato all’intero blocco successivo. Ad esempio, se un file è più grande di due blocchi ma più piccolo di tre, ci vogliono ancora tre blocchi di spazio per memorizzarlo.

Pubblicità

Vengono utilizzate due misure in relazione alle dimensioni del file., Il primo è la dimensione effettiva del file, che è il numero di byte di contenuto che compongono il file. Il secondo è la dimensione effettiva del file sul disco rigido. Questo è il numero di blocchi di file system necessari per memorizzare quel file.

Un esempio

Diamo un’occhiata a un semplice esempio., Staremo a reindirizzare un singolo carattere in un file per creare un file di piccole dimensioni:

echo "1" > geek.txt

Ora, useremo il listato di formato lungo, ls, a guardare la lunghezza del file:

ls -l geek.txt

La lunghezza è il valore numerico che segue il dave dave voci, che è di due byte. Perché sono due byte quando abbiamo inviato solo un carattere al file? Diamo un’occhiata a cosa sta succedendo all’interno del file.,

Advertisement

Useremo il comandohexdump, che ci darà un conteggio esatto dei byte e ci permetterà di “vedere” i caratteri non stampabili come valori esadecimali. Potremo anche utilizzare il -C (canonica) opzione per forzare l’output per visualizzare i valori esadecimali nel corpo dell’uscita, così come il loro carattere alfanumerico equivalenti:

hexdump -C geek.txt

L’output mostra che, a partire dall’offset 00000000 nel file, c’è un byte che contiene un valore esadecimale di 31 anni, e uno che contiene un valore esadecimale di 0A., La parte destra dell’output mostra questi valori come caratteri alfanumerici, ove possibile.

Il valore esadecimale di 31 viene utilizzato per rappresentare la cifra. Il valore esadecimale di 0A viene utilizzato per rappresentare il carattere di avanzamento riga, che non può essere visualizzato come carattere alfanumerico, quindi viene visualizzato come punto (.) invece. Il carattere di avanzamento riga viene aggiunto da echo. Per impostazione predefinita,echoavvia una nuova riga dopo aver visualizzato il testo che deve scrivere nella finestra del terminale.,

Che corrisponde all’output di ls e concorda con la lunghezza del file di due byte.

RELATED: Come usare il comando ls per elencare file e directory su Linux

Advertisement

Ora, useremo ildu comando per guardare la dimensione del file:

du geek.txt

Dice che la dimensione è quattro, ma quattro di cosa?

Ci sono blocchi, e poi ci sono Blocchi

Quandodu riporta le dimensioni dei file in blocchi, la dimensione che utilizza dipende da diversi fattori., È possibile specificare quale dimensione del blocco dovrebbe utilizzare sulla riga di comando. Se non si forza du per utilizzare una particolare dimensione del blocco, segue una serie di regole per decidere quale utilizzare.

Innanzitutto, controlla le seguenti variabili di ambiente:

  • DU_BLOCK_SIZE
  • BLOCK_SIZE
  • BLOCKSIZE

Se esiste una di queste, la dimensione del blocco è impostata e du smette di controllare. Se nessuno è impostato,du imposta di default una dimensione del blocco di 1.024 byte., A meno che non sia impostata una variabile di ambiente chiamata POSIXLY_CORRECT. Se questo è il caso, du il valore predefinito è una dimensione del blocco di 512 byte.

Pubblicità

Quindi, come scopriamo quale è in uso? Puoi controllare ogni variabile d’ambiente per risolverlo, ma c’è un modo più veloce. Confrontiamo i risultati con la dimensione del blocco utilizzata dal file system.

Per scoprire la dimensione del blocco utilizzato dal file system, useremo il programma tune2fs., Useremo quindi l’opzione-l (list superblock), pipe l’output attraversogrep, e quindi stampare le righe che contengono la parola “Block.”

In questo esempio, esamineremo il file system sulla prima partizione del primo disco rigido, sda1, e avremo bisogno di usare sudo:

sudo tune2fs -l /dev/sda1 | grep Block

La dimensione del blocco del file system è di 4.096 byte. Se lo dividiamo per il risultato ottenuto da du(quattro), mostra la du dimensione del blocco predefinita è 1,024 byte., Ora sappiamo diverse cose importanti.

Pubblicità

In primo luogo, sappiamo che la più piccola quantità di file system immobiliare che può essere dedicato alla memorizzazione di un file è di 4.096 byte. Ciò significa che anche il nostro piccolo file a due byte occupa 4 KB di spazio su disco rigido.

La seconda cosa da tenere a mente sono le applicazioni dedicate al reporting sulle statistiche del disco rigido e del file system, comedu,lsetune2fs, possono avere nozioni diverse su cosa significa “blocco”., L’applicazionetune2fs riporta le dimensioni dei blocchi del file system true, mentrels edu possono essere configurati o costretti a utilizzare altre dimensioni dei blocchi. Queste dimensioni di blocco non sono destinate a riguardare la dimensione del blocco del file system; sono solo “blocchi” che questi comandi usano nel loro output.

Infine, oltre a utilizzare diverse dimensioni di blocco, le risposte dadu etune2fs trasmettono lo stesso significato., Il risultato tune2fs era un blocco di 4.096 byte e il risultato du era quattro blocchi di 1.024 byte.

Utilizzando du

Senza parametri o opzioni della riga di comando,du elenca lo spazio totale su disco utilizzato dalla directory corrente e da tutte le sottodirectory.

Diamo un’occhiata ad un esempio:

du
Pubblicità

La dimensione è riportata nella dimensione predefinita del blocco di 1.024 byte per blocco. L’intero albero della sottodirectory viene attraversato.,

Uso del du in una Directory Diversa

Se vuoi du per il rapporto su una directory diversa da quella attuale, è possibile passare il percorso della directory su riga di comando:

du ~/.cach/evolution/

Uso del du in un File Specifico

Se vuoi du la relazione su un file specifico, passare il percorso per il file sulla riga di comando., È anche possibile passare un modello di shell a selezionare un gruppo di file, come ad esempio *.txt:

du ~/.bash_aliases

Creazione dei File nella Directory

Per du report su i file di una directory e sottodirectory, utilizzare il -a (tutti i file) opzione:

du -a
Pubblicità

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

Limitare la profondità dell’albero delle directory

Puoi dire adu di elencare l’albero delle directory a una certa profondità. Per fare ciò, utilizzare l’opzione -d (profondità massima) e fornire un valore di profondità come parametro. Si noti che tutte le sottodirectory vengono scansionate e utilizzate per calcolare i totali segnalati, ma non sono tutte elencate. Per impostare una profondità di directory massima di un livello, utilizzare questo comando:

du -d 1

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

elenco directory di un livello più profondo, utilizzare questo comando:

du -d 2

Impostazione della Dimensione del Blocco

È possibile utilizzare il tag block opzione per impostare la dimensione dei blocchi per du per l’operazione corrente.,d nel modo più appropriato la dimensione del blocco, secondo lo spazio su disco utilizzato da file e directory, utilizzare il tag -h (leggibile) opzione:

du -h

Per vedere le dimensioni del file piuttosto che la quantità di spazio su disco rigido utilizzato per memorizzare i file, utilizzare il tag --apparent-size opzione:

du --apparent-size
Pubblicità

È possibile combinare questo con il -a (tutti i) opzione per vedere le dimensioni di ogni file:

du --apparent-size -a

Ogni file è elencato, insieme con la sua dimensione apparente.,

Visualizzazione solo dei totali

Se si desideradu per segnalare solo il totale per la directory, utilizzare l’opzione-s (riepilogo)., È anche possibile combinare questo con altre opzioni, come il -h (leggibile) opzione:

du -h -s

Ecco, lo userò con il --apparent-size opzione:

du --apparent-size -s

la Visualizzazione dei Tempi di Modifica

Per vedere la creazione o la modifica di data e ora, utilizzare il tag --time opzioni:

du --time -d 2

Strano Risultati?,

Se vedi risultati strani dadu, specialmente quando fai riferimento incrociato alle dimensioni dell’output da altri comandi, di solito è dovuto alle diverse dimensioni dei blocchi a cui possono essere impostati diversi comandi o a quelli a cui sono predefiniti. Potrebbe anche essere dovuto alle differenze tra le dimensioni reali dei file e lo spazio su disco richiesto per memorizzarli.

Se è necessario abbinare l’output di altri comandi, sperimentare l’opzione--blockindu.,

Dave McKay
Dave McKay ha usato per la prima volta i computer quando il nastro di carta punzonato era in voga, e da allora ha programmato. Dopo oltre 30 anni nel settore IT, ora è un giornalista tecnologico a tempo pieno. Durante la sua carriera, ha lavorato come programmatore freelance, manager di un team internazionale di sviluppo software, project manager di servizi IT e, più recentemente, come responsabile della protezione dei dati. Dave è un evangelista di Linux e fautore dell’open source.Leggi la Biografia completa ”

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *