Alla ricerca di una serie di comandi che mi mostreranno i file più grandi su un'unità.
Alla ricerca di una serie di comandi che mi mostreranno i file più grandi su un'unità.
Risposte:
Se hai solo bisogno di trovare file di grandi dimensioni, puoi utilizzare find
con l' -size
opzione. Il comando successivo elencherà tutti i file di dimensioni superiori a 10 MiB (da non confondere con 10 MB ):
find / -size +10M -ls
Se si desidera trovare file tra una determinata dimensione, è possibile combinarlo con una ricerca "dimensione inferiore a". Il comando successivo trova i file tra 10 MiB e 12 MiB:
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:
Sono passati anni e i dischi sono diventati sempre più grandi, ma anche in questa era incredibilmente enorme del disco rigido, lo spazio sembra scomparire nel tempo. Questo piccolo ed efficace programma fornisce un elenco più conveniente rispetto al du predefinito (1). Visualizza ciò che è accaduto dall'ultima esecuzione e visualizza le dimensioni dir e la percentuale totale. È possibile navigare e risalire alle directory utilizzando i tasti cursore con browser basato su testo (collegamenti, elink, lince, ecc.)
Nella sezione "pacchetti correlati" di gt5 , ho trovato ncdu
. Dalla sua descrizione del pacchetto:
Ncdu è un visualizzatore basato su ncurses. Fornisce un'interfaccia veloce e facile da usare attraverso il famoso du utility. Permette di sfogliare le directory e mostrare le percentuali di utilizzo del disco con la libreria ncurses.
-ls
output è hardcoded (vedere il codice sorgente per le funzioni pred_fls
e list_file ). Potresti provare ad approssimare l'output usando l' -printf
opzione, post-processare l'output con awk o usare qualcosa di similefind ... -type f -exec ls -ldh {} \; | column -t
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 risciacquo e ripetizione . Scegli come target le sottodirectory che ritieni siano troppo grandi, esegui il comando per loro e scopri cosa sta causando il problema.
Nota: uso du
il -x
flag di per limitare le cose a un solo filesystem (ho una disposizione piuttosto complicata di cose incrociate tra SSD e RAID5).
Nota 2: 2>/dev/null
reindirizza tutti i messaggi di errore nell'oblio. Se non ti danno fastidio, non è obbligatorio.
du
pagina man: "Riassumi l'utilizzo del disco di ciascun FILE, ricorsivamente per le directory".
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. Lascialo fuori solo per le directory-BM
per generare le dimensioni in megabyte (M) dimensioni del blocco (B)2>/dev/null
- escludi i messaggi di errore "permesso negato" (grazie @Oli)sort
argomenti:
-n
per "numerico"-r
per "reverse" (dal più grande al più piccolo)head
argomenti:
-n 50
per i primi 50 risultati.more
se si utilizza un numero più piccoloNota: prefisso con sudo
per includere le directory a cui il tuo account non dispone dell'autorizzazione per 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
La risposta di qbi è corretta ma sarà molto lenta quando ci sono molti file poiché avvierà un nuovo processo ls per ogni elemento.
una versione molto più veloce usando find senza generare processi figlio 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
Per visualizzare le principali 20 directory principali (ricorsivamente) nella cartella corrente, utilizzare la seguente riga 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 (ricorsivamente):
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
Nota che
-h
è disponibilesort
solo per GNU , quindi per farlo funzionare correttamente su OSX / BSD, devi installarlo dacoreutils
. Quindi aggiungi la sua cartella nel tuoPATH
.
Quindi questi alias sono utili da avere nei tuoi file rc (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'
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 eseguirà ls -s
su di essi. L'ultimo comando stampa la dimensione allocata di un file più il nome file. Il risultato viene ordinato numericamente e vengono visualizzate le ultime cinque voci. Quindi, come risultato, vedrai i 5 file più grandi in $DIRETORY
qualsiasi sottodirectory. Se inserisci 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
).
Quando ho bisogno di fare più spazio libero sui server, utilizzo questo comando. Trova tutti i file più grandi di 50 MB e "du -h" rende un elenco migliore di file e "ordina -n" dopo che pipe crea un elenco numerico ordinato per dimensione del file.
find / -size +50M -type f -exec du -h {} \; | sort -n
Prova Baobab, ti offre una panoramica grafica di file e cartelle, puoi vedere dove sono i maiali dello spazio reale ed eliminarli con un clic https://help.ubuntu.com/community/Baobab
Puoi anche ordinare i file per dimensione:
find . -type f -exec du -h {} \; | sort -k1 -h
Trova solo i file ed esegue du -h
per ogni file, che mostra la dimensione del file. Infine, ordiniamo l'output di find
/ in du
base alla prima colonna (in formato leggibile dall'uomo).
L'ultimo file stampato è il più grande.
Puoi usare il comando per vedere i file più grandi mentre salti le directory:
sudo find / -type f -printf “%s\t%p\n” | sort -n | tail -1
find $HOME -type f -printf ‘%s %p\n’ | sort -nr | head -10
Per trovare tutti i file di dimensioni superiori a 100 MiB (non sono 100 MB, vedere qui se si è confusi):
find / -size +100M -ls
il comando seguente mostrerà i 5 file più grandi nella cartella $DIRECTORY
:
find $DIRECTORY -type f -exec ls -s {} \; | sort -n | tail -n 5
USO du
: Il comando sotto il quale utilizza du, visualizza le directory con le 20 dimensioni più grandi nella cartella di lavoro principale:
sudo du -a /home | sort -n -r | head -n 20
Ora per visualizzare ora le directory / i file più grandi, comprese le sottocartelle, eseguire:
du -Sh | sort -rh | head -n 10
Utilizzando ls
:
Per elencare i 5 file più grandi nella directory / bin, eseguire il comando seguente:
ls -lSh /bin | head -5
È inoltre possibile utilizzare Disk Usage Analyzer o Baobao, come mostrato qui per esempio.
Un ottimo strumento user-friendly a cui fa riferimento la risposta a una domanda simile è lo NCurses Disk Usage
strumento:
sudo ncdu /