- Dave McKay
@TheGurkha
- 19 dicembre 2019, 8:00 EDT
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.
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.,
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,echo
avvia 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
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.
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.
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
,ls
etune2fs
, 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
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
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
È 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--block
indu
.,
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 ”