• seguici su feed rss
  • seguici su twitter
  • seguici su linkedin
  • seguici su facebook
  • cerca

SEI GIA' REGISTRATO? EFFETTUA ADESSO IL LOGIN.



ricordami per 365 giorni

HAI DIMENTICATO LA PASSWORD? CLICCA QUI

NON SEI ANCORA REGISTRATO ? CLICCA QUI E REGISTRATI !

Conoscere lo spazio su disco occupato da un file o una directory in Linux: il comando du e le sue opzioni

di :: 28 febbraio 2018
Conoscere lo spazio su disco occupato da un file o una directory in Linux: il comando du e le sue opzioni

Il comando "du" (Disk Usage) è un comando Linux utilizzato per conoscere le dimensioni occupate su disco dalle directories, dalle loro sotto directories, e dai files.

E' quindi molto utile per rintracciare directories e files che consumano grandi quantità di spazio su un'unità disco rigido (HDD) o altri supporti di memorizzazione (ad esempio USB).

Ogni computer è caratterizzato da una alberatura di directories "parent" e sottodirectories "children" . Possiamo utilizzare "du" in qualunque directory, per ottenere informazioni relative allo spazio occupato da questa directory e dalle sue sottodirecory.

Le directory che occupano molto spazio o che saturano la capienza del disco, possono rallentare il sistema, impedire agli utenti di accedere e persino provocare un arresto anomalo del sistema. Quindi è importante monitorare costantenemente l'utilizzo del disco.

Il comando "du" ha molte opzioni, che, combinate tra loro, consentono di visualizzare le informazioni effettivamente necessarie e nel formato più adeguato.

L'unico difetto, se così possiamo chiamarlo, di "du" è che i dati visualizzati relativi alle dimensioni delle directory e dei file sono delle approssimazioni, e non dei numeri esatti, e quindi può esserci una piccola discrepanza tra le informazioni ottenute con "du" e le dimensioni riportate da altri comandi, come ad esempio "df". Tuttavia, questo difetto non limita la sua utilità.

In questo articolo vediamo alcuni esempi di suo utilizzo.

Visualizzo lo spazio occupato da una directory e dalle sue sottodirectories.

Se vogliamo conoscere lo spazio disco utilizzato da un directory (parent) e da tutte le sue sottodirectory (children), utilizziamo il comando "du" seguto dal parent directory oggetto della nostra analisi.

Ad esempio se la directory di nostro interesse è "/home/pippo", l'output mostrerà il numero di blocchi del disco nella directory /home/pippo e le sue sottodirectory.

# du  /home/pippo

4       /home/pippo/.mozilla/extensions
4       /home/pippo/.mozilla/plugins
12      /home/pippo/.mozilla
1748      /home/pippo

Visualizzo l'output in un formato più leggibile

Utilizzando l'opzion "-h", il comando "du" visualizzerà l'utilizzo disco in un formato più leggibile, cioè in Bytes, Kilobytes, Megabytes, Gigabytes, ....

# du -h /home/pippo

4.0K    /home/pippo/.mozilla/extensions
4.0K    /home/pippo/.mozilla/plugins
12K     /home/pippo/.mozilla
1.8M    /home/pippo

Se vogliamo visualizzare l'output solamente in Megabyte utilizziamo l'opzione "-B" (oppure "--block-size") seguita da "M" cioè Megabyte

# du -B M /home/pippo

1M      /home/pippo/.mozilla/extensions
1M      /home/pippo/.mozilla/plugins
1M      /home/pippo/.mozilla
2M      /home/pippo

In modo analogo possiamo visualizzare i dati nelle altre unità di misura: K per Kilobytes, M per Megabytes, G per Gigabytes, T per Terabytes, ...

Visualizzo il totale generale di utilizzo di spazio disco

Per aggiungere alla fine della lista una riga con il totale generale, utilizziamo l'opzione "-c" (che non sarà altro che lo spazio occupato dalla directory parent)

# du -hc /home/pippo

4.0K    /home/pippo/.mozilla/extensions
4.0K    /home/pippo/.mozilla/plugins
12K     /home/pippo/.mozilla
1.8M    /home/john
1.8M    total

Visualizzo lo spazio occupato dalla sola directory parent

Se siamo interessato alla sola directory "home/pippo" senza le sue sottodirectory utilizziamo l'opzione "-s", che utilizziamo in abbinamento a "-h" per ottenere un formato più leggibile

# du -sh /home/pippo

1.8M     /home/pippo

Visualizzo lo spazio occupato anche dai files

Se siamo interessati utilizzo del disco non solo delle directories ma anche dei files, utilizziamo l'opzione "-a" (oppure "--all"), che utilizziamo in abbinamento a "-h" per ottenere un formato più leggibile

# du -ah /home/pippo

4.0K    /home/john/prova1.txt
4.0K    /home/john/prova2.txt
1.8M    /home/john/IMG_20171021_153221.jpg
4.0K    /home/pippo/.bash_profile
4.0K    /home/pippo/.bash_logout
4.0K    /home/pippo/.mozilla/extensions
4.0K    /home/pippo/.mozilla/plugins
12K     /home/pippo/.mozilla
4.0K    /home/pippo/.bashrc
1.8M    /home/pippo

Visualizzo l'utilizzo disco escludendo specifici files

Se dalla nostra visualizzazione vogliamo escludere specifici files, ad esempio files con una determinata estensione, utilizziamo l'opzione "-- exclude".

Ad esempio, se vogliamo escludere i files ".txt" utilizziamo l'opzione --exclude="*.txt" dove l'asterisco è una "wildcars" ed è equivalente a "tutti i files con estensione .txt"

# du -ah --exclude="*.txt" /home/pippo

1.8M    /home/pippo/IMG_20171021_153221.jpg
4.0K    /home/pippo/.bash_profile
4.0K    /home/pippo/.bash_logout
4.0K    /home/pippo/.mozilla/extensions
4.0K    /home/pippo/.mozilla/plugins
12K     /home/pippo/.mozilla
4.0K    /home/pippo/.bashrc
1.8M    /home/pippo

Visualizzo l'utilizzo del disco in base alla data di modifica di files e directories

Se siamo anche interessati alla data di modifica dei files e directories utilizziamo l'opzione "-time"

# du -ah --time /home/pippo

4.0K    2018-02-28 07:56        /home/pippo/prova1.txt
4.0K    2018-02-28 07:57        /home/pippo/prova2.txt
1.8M    2017-10-21 14:32        /home/pippo/IMG_20171021_153221.jpg
4.0K    2014-09-25 22:25        /home/pippo/.bash_profile
4.0K    2014-09-25 22:25        /home/pippo/.bash_logout
4.0K    2013-02-16 12:57        /home/pippo/.mozilla/extensions
4.0K    2013-02-16 12:57        /home/pippo/.mozilla/plugins
12K     2013-06-27 19:19        /home/pippo/.mozilla
4.0K    2014-09-25 22:25        /home/pippo/.bashrc
1.8M    2018-02-28 08:52        /home/pippo

Limito il livello di profondità delle analisi

Un'altra opzione utile è "--max-depth", che consente di limitare la ricerca, in un albero di directories, al livello di profondità desiderato (cioè al livello di sottodirectory desiderato).

Ad esempio, per limitarci al primo livello di sottodirectory, usiamo --max-depth = 1

# du -h --max-dept=1 /home/pippo

12K     /home/pippo/.mozilla
1.8M    /home/pippo

L'impostazione --max-depth = 0 è equivalente all'utilizzo dell'opzione "-s" cioè ci limitiamo alla directory parent senza visualizzare directory children.

Utilizzo con filtri

Come nel caso di altri comandi in Linux, du può essere collegato, atrraverso l'utilizzo di un pipe (la stanghetta |), a filtri per rendere ancora più utili i dati ottenuti.

Ad esempio, per disporre gli elementi di output in base alla loro dimensione, du possiamo utilizzare il pipe per reindirizzare l'output al comando sort con l'opzione "-n" che serve a ordinare l'output utilizzando come criterio di ordinamento i valori numerici (quindi il peso)

# du -ha /home/pippo | sort -n

1.8M    /home/pippo
1.8M    /home/pippo/IMG_20171021_153221.jpg
4.0K    /home/pippo/.bash_logout
4.0K    /home/pippo/.bash_profile
4.0K    /home/pippo/.bashrc
4.0K    /home/pippo/.mozilla/extensions
4.0K    /home/pippo/.mozilla/plugins
4.0K    /home/pippo/prova1.txt
4.0K    /home/pippo/prova2.txt
12K     /home/pippo/.mozilla

Capita spesso che l'ouput sia molto lungo e quindi scorre velocemente rendendolo praticamente illeggibile. Possiamo utilizzare in questi casi il filtro "less" che consente di visualizzare l'output con una schermata alla volta.

# du -h /home/pippo | less

L'output ottenuto tramite less può essere avanzato di una schermata alla volta premendo la barra spaziatrice, o riga per riga usando le frecce up e down, e può essere spostato all'indietro di una schermata alla volta premendo il tasto b. Per uscire dalla schermate utilizzare la lettera q della tastier ("quite").

E anche possibile prendere il risultato e filtrarlo nuovamente, cioè utlizzare più pipe. Ad esempio se vogliamo ordinare per dimensione e poi, dopo l'ordinamento, mostrare una schermata alla volta utilizziamo i filtri in modo concatenato così:

# du -h /home/pippo | sort -n | less

Tra i filtri molto in uso esiste il filtro "grep" ed è utilizzato per cercare una certa stringa nell'ouput ottenuto da "du"

Ad esempio se ci interessano solo le linee di output che contengono la stringa "prova":

# du -ha /home/pippo | grep prova

4.0K    /home/pippo/prova1.txt
4.0K    /home/pippo/prova2.txt

As esempio, se mi interessano le linee di output che presentano la lettera maiuscola M

# du -ha /home/pippo | grep M

1.8M    /home/pippo/IMG_20171021_153221.jpg
1.8M    /home/pippo

Individuo le directory e i files più capienti

Per la gestione del nostro server Linux spesso è necessario indi individuare files e directories che occupano più spazio sul nostro disco.

Nel nostro esempio ci interessa la directory /var/www/html del nostro sistema.

Utilizziamo "du" e ordiniamo l'output ottenuto per peso decrescente (dal maggiore al minore) utilizzando sort con l'opzioni "-n", già visto in precedenza, e "-r" che ordina in modo decrescente, quindi dal peso più grande al più piccolo

Passiamo l'ouput ottenuto al comando head che ci consente di limitare il numero di righe da visualizzare, ad esempio 10 righe

# du -ha B M /var/www/html | sort -n -r | head -n 10

1020K   /var/www/html/contents/8/289
1020K   /var/www/html/contents/4/32600.mp4
1020K   /var/www/html/contents/4/15966.mp4
1020K   /var/www/html/contents/4/15148.mp4
1020K   /var/www/html/contents/1/850.jpg
1016K   /var/www/html/sito1/folders/landing/53
1016K   /var/www/html/contents/4/framevideo/38637
1016K   /var/www/html/contents/4/framevideo/38629
1016K   /var/www/html/contents/4/32606.mp4
1016K   /var/www/html/contents/4/17354.mp4

Il manuale del comando du

Per conoscere tutte le opzioni del comando "du" utilizziamo il classico "--help"

# du --help
Usage: du [OPTION]... [FILE]...
  or:  du [OPTION]... --files0-from=F
Summarize disk usage of each FILE, recursively for directories.

Mandatory arguments to long options are mandatory for short options too.
  -0, --null            end each output line with 0 byte rather than newline
  -a, --all             write counts for all files, not just directories
      --apparent-size   print apparent sizes, rather than disk usage; although
                          the apparent size is usually smaller, it may be
                          larger due to holes in ('sparse') files, internal
                          fragmentation, indirect blocks, and the like
  -B, --block-size=SIZE  scale sizes by SIZE before printing them.  E.g.,
                           '-BM' prints sizes in units of 1,048,576 bytes.
                           See SIZE format below.
  -b, --bytes           equivalent to '--apparent-size --block-size=1'
  -c, --total           produce a grand total
  -D, --dereference-args  dereference only symlinks that are listed on the
                          command line
  -d, --max-depth=N     print the total for a directory (or file, with --all)
                          only if it is N or fewer levels below the command
                          line argument;  --max-depth=0 is the same as
                          --summarize
      --files0-from=F   summarize disk usage of the NUL-terminated file
                          names specified in file F;
                          If F is - then read names from standard input
  -H                    equivalent to --dereference-args (-D)
  -h, --human-readable  print sizes in human readable format (e.g., 1K 234M 2G)
  -k                    like --block-size=1K
  -L, --dereference     dereference all symbolic links
  -l, --count-links     count sizes many times if hard linked
  -m                    like --block-size=1M
  -P, --no-dereference  don't follow any symbolic links (this is the default)
  -S, --separate-dirs   do not include size of subdirectories
      --si              like -h, but use powers of 1000 not 1024
  -s, --summarize       display only a total for each argument
  -t, --threshold=SIZE  exclude entries smaller than SIZE if positive,
                          or entries greater than SIZE if negative
      --time            show time of the last modification of any file in the
                          directory, or any of its subdirectories
      --time=WORD       show time as WORD instead of modification time:
                          atime, access, use, ctime or status
      --time-style=STYLE  show times using style STYLE:
                          full-iso, long-iso, iso, +FORMAT
                          FORMAT is interpreted like 'date'
  -X, --exclude-from=FILE  exclude files that match any pattern in FILE
      --exclude=PATTERN    exclude files that match PATTERN
  -x, --one-file-system    skip directories on different file systems
      --help     display this help and exit
      --version  output version information and exit

Display values are in units of the first available SIZE from --block-size,
and the DU_BLOCK_SIZE, BLOCK_SIZE and BLOCKSIZE environment variables.
Otherwise, units default to 1024 bytes (or 512 if POSIXLY_CORRECT is set).

SIZE is an integer and optional unit (example: 10M is 10*1024*1024).  Units
are K, M, G, T, P, E, Z, Y (powers of 1024) or KB, MB, ... (powers of 1000).

Report du bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
For complete documentation, run: info coreutils 'du invocation'
You have new mail in /var/spool/mail/root

Potrebbe interessarti

 
x

ATTENZIONE