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, echo
inizia 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);