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


203

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


Qualcosa di grafico andrebbe bene?
RolandiXor

5
no, in esecuzione sulla riga di comando su ssh.
Ryan Detzel,

La cosa strana è 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 la causa.
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:


277

Se hai solo bisogno di trovare file di grandi dimensioni, puoi utilizzare findcon l' -sizeopzione. 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.)

Schermata di GT5

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.

Schermata di ncdu


3
ncdu è molto veloce e proprio quello di cui avevo bisogno, grazie! Ho provato anche GT5, ma l'ho appena cancellato perché "pensava" troppo a lungo senza alcun feedback
Lukas

7
Santa merda, ncdu è incredibile, grazie per aver condiviso le tue scoperte!
While-E,

Mi piacerebbe che ncdu fosse sottolineato più forte. Ne ho bisogno una volta ogni tanto e non ricordo il nome.
Martin Thoma,

Basta ricordare i comandi grazie a ncdu :)
Mr Coder,

1
@matt No, il formato di output per l' -lsoutput è hardcoded (vedere il codice sorgente per le funzioni pred_flse list_file ). Potresti provare ad approssimare l'output usando l' -printfopzione, post-processare l'output con awk o usare qualcosa di similefind ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn

33

Uso solo una combinazione di due 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 duil -xflag 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/nullreindirizza tutti i messaggi di errore nell'oblio. Se non ti danno fastidio, non è obbligatorio.


1
Quando eseguo questo comando du discende nelle directory secondarie. Dalla dupagina man: "Riassumi l'utilizzo del disco di ciascun FILE, ricorsivamente per le directory".
Jamie,

26

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:

  • -aper "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.
  • Lasciare fuori morese si utilizza un numero più piccolo

Nota: prefisso con sudoper 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

10

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


1
Conferma che questo è molto più veloce
Cookie

10

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è disponibile sortsolo per GNU , quindi per farlo funzionare correttamente su OSX / BSD, devi installarlo da coreutils. Quindi aggiungi la sua cartella nel tuo PATH.

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'

8

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 $DIRECTORYed eseguirà ls -ssu 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 $DIRETORYqualsiasi sottodirectory. Se inserisci tail -n 1vedrai 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).


5

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

1

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


2
In questa particolare domanda, l'OP preferisce un metodo da riga di comando. Vedi i commenti alla domanda. Modificherò anche la domanda.

1

Per trovare tutti i file GB, ad esempio, vorrei usare du e grep, anche se anche gli altri metodi citati qui sembrano grandi.

du -h -a /dir | grep "[0-9]G\b"  

Puoi anche divertirti con l'opzione --except che du ha.


0

Puoi anche ordinare i file per dimensione:

find . -type f -exec du -h {} \; | sort -k1 -h

Trova solo i file ed esegue du -hper ogni file, che mostra la dimensione del file. Infine, ordiniamo l'output di find/ in dubase alla prima colonna (in formato leggibile dall'uomo).

L'ultimo file stampato è il più grande.


0

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.


0

Un ottimo strumento user-friendly a cui fa riferimento la risposta a una domanda simile è lo NCurses Disk Usagestrumento:

sudo ncdu /

Bene, iniziare dalla radice del filesystem era esattamente l'opposto di inutile per me. Mi ha permesso di identificare i luoghi più importanti di destinazione per il risparmio di spazio in tutto il filesystem. Indipendentemente da ciò, è possibile utilizzare il menzionato per iniziare in qualsiasi directory. Consulta i documenti per quello strumento. Ma, come richiesto, ecco il link alla risposta della fonte .
Janoside,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.