Introduzione

Quando si elenca il contenuto di una directory utilizzando il comando ls, è possibile notare che la dimensione delle directory è quasi sempre di 4096 byte (4 KB). Questa è la dimensione dello spazio sul disco utilizzato per archiviare le meta-informazioni per la directory, non ciò che contiene.

Il comando che vorrai utilizzare per ottenere la dimensione effettiva di una directory è du, che è l'abbreviazione di disk usage.

Ottenere le dimensioni di una directory

Il comando du visualizza la quantità di spazio utilizzata dai file o dalle directory specificati. Se il percorso specificato è una directory, du riepiloga l'utilizzo del disco di ciascuna sottodirectory in quella directory. Se non viene specificato alcun percorso, du segnala l'utilizzo del disco della directory di lavoro corrente.

Se richiamato senza alcuna opzione, du visualizza l'utilizzo del disco della directory specificata e di ciascuna delle sue sottodirectory in byte.

In genere, si desidera visualizzare lo spazio occupato dalla directory in un formato leggibile dall'uomo. Ad esempio, per ottenere la dimensione totale della directory /var, eseguire il comando seguente:

sudo du -sh /var

L'output sarà simile al seguente:

85G	/var

Spieghiamo il comando e i suoi argomenti:

  • Il comando inizia con sudo perché la maggior parte dei file e delle directory all'interno della directory /var sono di proprietà dell'utente root e non sono leggibili dagli utenti normali. Se si omette sudo il comando du, verrà stampato "du: cannot read directory".
  • s - Visualizza solo la dimensione totale della directory specificata, non visualizzare i totali della dimensione del file per le sottodirectory.
  • h- Dimensioni di stampa in un formato leggibile dall'uomo h (human-readable format).
  • /var - Il percorso della directory che si desidera ottenere la dimensione.

Cosa succede se si desidera visualizzare l'utilizzo del disco delle sottodirectory di primo livello? Hai due opzioni. Il primo è utilizzare il simbolo asterisco (*) come mostrato di seguito, che significa "abbina tutto ciò che non inizia con un punto ( .)". L'opzione -c dice al comando du di stampare un totale complessivo di tutte le dimensioni:

sudo du -shc /var/*
24K	/var/db
4.0K	/var/empty
4.0K	/var/games
77G	/var/lib
4.0K	/var/local
0	/var/lock
3.3G	/var/log
0	/var/mail
4.0K	/var/opt
0	/var/run
196K	/var/spool
28K	/var/tmp
85G	total

Un altro modo per ottenere un report sull'utilizzo del disco delle sottodirectory di primo livello è utilizzare l'opzione --max-depth:

sudo du -h --max-depth=1 /var
77G	  /var/lib
24K	  /var/db
4.0K	/var/empty
4.0K	/var/local
4.0K	/var/opt
196K	/var/spool
4.0K	/var/games
3.3G	/var/log
5.0G	/var/cache
28K	/var/tmp
85G	/var
85G	total

Per impostazione predefinita, il comando du mostra lo spazio su disco utilizzato dalla directory o dal file. Per trovare la dimensione apparente di una directory, utilizzare l'opzione --apparent-size. La "apparent size" di un file è quanti dati sono effettivamente nel file.

sudo du -sh --apparent-size /var

Quando si trasferisce una directory tramite SCP , Rsync o SFTP, la quantità di dati trasferiti sulla rete è la dimensione apparente dei file. Questo è il motivo per cui la dimensione dello spazio sul disco utilizzato sull'origine quando visualizzato con du (senza --apparent-size) non è uguale alla dimensione sulla destinazione.

Il comando du può anche essere combinato con altri comandi con pipe.

Ad esempio, per stampare le 5 directory più grandi all'interno della directory /var, è necessario reindirizzare l'output du al comando sort  per ordinare le directory in base alle loro dimensioni e quindi reindirizzare l'output al comando head che stamperà solo le prime 5 directory:

sudo du -h /var/ | sort -rh | head -5
85G	/var/
77G	/var/lib
75G	/var/lib/libvirt/images
75G	/var/lib/libvirt
5.0G	/var/cache/pacman/pkg

Conclusione

In Linux, puoi ottenere le dimensioni di una directory usando il comando du.