Domanda Qual è un modo della riga di comando per trovare file / directory di grandi dimensioni per rimuovere e liberare spazio?


Alla ricerca di una serie di comandi che mi mostreranno i file più grandi su un disco.


158
2018-04-20 14:01


origine


Qualcosa di grafico andrebbe bene? - RolandiXor♦
no, in esecuzione su linea di comando su ssh. - Ryan Detzel
Ciò che è strano è che ho due server che eseguono la stessa cosa. Uno è al 50% di utilizzo del disco e l'altro al 99%. Non riesco a trovare cosa lo stia causando. - Ryan Detzel
Quindi sono confuso, dice che il 98% è usato con du ma quando eseguo l'app gt5 ottengo: grab.by/9Vv2 - Ryan Detzel


risposte:


Se hai solo bisogno di trovare file di grandi dimensioni, puoi usare find con il -size opzione. Il prossimo comando elencherà tutti i file più grandi di 10MiB (da non confondere con 10 MB):

find / -size +10M -ls

Se si desidera trovare file tra una certa dimensione, è possibile combinarlo con una ricerca di "taglia inferiore a". Il prossimo comando trova i file tra 10MiB e 12MiB:

find / -size +10M -size -12M -ls

apt-cache search 'disk usage' elenca alcuni programmi disponibili per l'analisi dell'utilizzo del disco. Un'applicazione che sembra molto promettente è gt5.

Dalla descrizione del pacchetto:

Gli anni sono passati ei dischi sono diventati sempre più grandi, ma anche in questa incredibile epoca di hard disk, lo spazio sembra scomparire nel tempo. Questo piccolo ed efficace programma fornisce un elenco più conveniente rispetto al predefinito du (1). Visualizza ciò che è successo dall'ultima esecuzione e mostra la dimensione della dir e la percentuale totale. È possibile navigare e salire alle directory usando i tasti cursore con il browser basato su testo (collegamenti, elinks, lince, ecc.)

Screenshot of gt5

Nella sezione "pacchetti correlati" di GT5, Ho trovato ncdu. Dalla sua descrizione del pacchetto:

Ncdu è un visualizzatore du basato su ncurses. Fornisce un'interfaccia veloce e facile da usare attraverso la famosa utility du. Permette di navigare tra le directory e mostrare le percentuali di utilizzo del disco con la libreria ncurses.

Screenshot of ncdu


222
2018-04-20 14:16



ncdu è molto veloce e proprio quello di cui avevo bisogno, grazie! Ho provato anche gt5, ma l'ho appena cancellato perché stava "pensando" troppo a lungo senza alcun feedback - Lukas
Holy Crap, ncdu è incredibile, grazie per aver condiviso le tue scoperte! - While-E
Mi piacerebbe se ncdu è stato sottolineato più forte. Ne ho bisogno una volta ogni tanto e non riesco a ricordare il nome. - Martin Thoma


Io uso solo una combinazione di du e sort.

sudo du -sx /* 2>/dev/null | sort -n

0   /cdrom
0   /initrd.img
0   /lib64
0   /proc
0   /sys
0   /vmlinuz
4   /lost+found
4   /mnt
4   /nonexistent
4   /selinux
8   /export
36  /media
56  /scratchbox
200 /srv
804 /dev
4884    /root
8052    /bin
8600    /tmp
9136    /sbin
11888   /lib32
23100   /etc
66480   /boot
501072  /web
514516  /lib
984492  /opt
3503984 /var
7956192 /usr
74235656    /home

Quindi è un caso di risciacqua e ripeti. Scegli come target le sottodirectory che ritieni siano troppo grandi, esegui il comando per loro e scopri cosa sta causando il problema.

Nota: io uso du'S -x flag per mantenere le cose limitate a un filesystem (ho un arrangiamento piuttosto complicato di cose cross-mounted tra SSD e RAID5).

Nota 2: 2>/dev/null reindirizza eventuali messaggi di errore nell'oblio. Se non ti danno fastidio, non è obbligatorio.


29
2018-04-20 14:30



Quando eseguo questo comando du scende nelle directory figlio. Dal du man page: "Riepiloga l'utilizzo del disco di ogni FILE, in modo ricorsivo per le directory." - Jamie


La mia soluzione preferita utilizza un mix di molte di queste buone risposte.

du -aBM 2>/dev/null | sort -nr | head -n 50 | more

du argomenti:

  • -a per "tutti" file e directory. Lascia fare solo per le directory
  • -BM per produrre le dimensioni in blocchi di megabyte (M) (B)
  • 2>/dev/null - esclude i messaggi di errore "permesso negato" (grazie a @Oli)

sort argomenti:

  • -n per "numerico"
  • -r per "reverse" (dal più grande al più piccolo)

head argomenti:

  • -n 50 per i migliori 50 risultati.
  • Smettere more se si utilizza un numero più piccolo

Nota: prefisso con sudo includere le directory che il tuo account non ha il permesso di accedere.

Esempio che mostra i primi 10 file e directory più grandi in / var (incluso il totale generale).

cd /var
sudo du -aBM 2>/dev/null | sort -nr | head -n 10
7555M   .
6794M   ./lib
5902M   ./lib/mysql
3987M   ./lib/mysql/my_database_dir
1825M   ./lib/mysql/my_database_dir/a_big_table.ibd
997M    ./lib/mysql/my_database_dir/another_big_table.ibd
657M    ./log
629M    ./log/apache2
587M    ./log/apache2/ssl_access.log
273M    ./cache

16
2017-07-03 23:24



lo adoro, grazie - electblake


La risposta di qbi è corretta ma sarà molto lenta quando ci sono molti file da quando inizierà un nuovo processo ls per ogni oggetto.

una versione molto più veloce usando find senza generare figli processi sarebbe usare printf per stampare la dimensione in byte (% s) e il percorso (% p)

find "$directory" -type f -printf "%s - %p\n" | sort -n | tail -n $num_entries


8
2017-11-16 12:55



Conferma che questo è molto più veloce - Cookie


Per visualizzare le directory più grandi nella top 20 (in modo ricorsivo) nella cartella corrente, utilizzare la seguente linea singola:

du -ah . | sort -rh | head -20

o (più orientato a Unix):

du -a . | sort -rn | head -20

Per i primi 20 file più grandi nella directory corrente (in modo ricorsivo):

ls -1Rs | sed -e "s/^ *//" | grep "^[0-9]" | sort -nr | head -n20

o con dimensioni leggibili dall'uomo:

ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20

Si prega di notare che -h è disponibile per GNU sort solo, quindi per farlo funzionare correttamente su OSX / BSD, devi installarlo da coreutils. Quindi aggiungi la sua cartella al tuo PATH.

Quindi questi alias sono utili per avere nel tuo rc file (ogni volta che ne hai bisogno):

alias big='du -ah . | sort -rh | head -20'
alias big-files='ls -1Rhs | sed -e "s/^ *//" | grep "^[0-9]" | sort -hr | head -n20'

7
2018-03-05 14:17





Questa sembra l'applicazione perfetta per find:

find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5

Questo comando troverà tutti i file nella directory $DIRECTORY ed esegui ls -s su di essi. L'ultimo comando stampa la dimensione allocata di un file più il nome del file. Il risultato viene ordinato numericamente e vengono visualizzate le ultime cinque voci. Quindi come risultato vedrai i 5 file più grandi in $DIRETORY o qualsiasi sottodirectory. Se entri tail -n 1 vedrai solo il file più grande.

Inoltre puoi giocare molto con find. Ad esempio puoi cercare file più giovani di n giorni (-ctime -n) o che appartengono a utenti speciali (-user johndoe).


6
2018-04-20 14:26





Quando ho bisogno di liberare più spazio sui server, utilizzo questo comando. Trova tutti i file più grandi di 50 MB e "du -h" crea un elenco migliore di file e "ordina -n" dopo che la lista di pipe è stata ordinata numericamente per dimensione del file.

find / -size +50M -type f -exec du -h {} \; | sort -n

2
2017-10-11 20:40