¿Qué es una forma de línea de comando para encontrar archivos / directorios grandes para eliminar y liberar espacio?

203

Buscando una serie de comandos que me muestren los archivos más grandes en una unidad.

Ryan Detzel
fuente
¿Algo gráfico estaría bien?
RolandiXor
55
no, se ejecuta en la línea de comando sobre ssh.
Ryan Detzel
Lo extraño es que tengo dos servidores que ejecutan lo mismo. Uno está al 50% de uso del disco y el otro al 99%. No puedo encontrar lo que está causando esto.
Ryan Detzel
Así que estoy confundido, dice que el 98% lo usa con du pero cuando ejecuto la aplicación gt5 obtengo: grab.by/9Vv2
Ryan Detzel

Respuestas:

277

Si solo necesita encontrar archivos grandes, puede usar findcon la -sizeopción. El siguiente comando enumerará todos los archivos de más de 10MiB (que no deben confundirse con 10MB ):

find / -size +10M -ls

Si desea buscar archivos con un tamaño determinado, puede combinarlo con una búsqueda de "tamaño inferior a". El siguiente comando busca archivos entre 10MiB y 12MiB:

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

apt-cache search 'disk usage'enumera algunos programas disponibles para el análisis del uso del disco. Una aplicación que parece muy prometedora es gt5.

De la descripción del paquete:

Han pasado años y los discos se han vuelto cada vez más grandes, pero incluso en esta era de disco duro increíblemente enorme, el espacio parece desaparecer con el tiempo. Este pequeño y efectivo programa proporciona una lista más conveniente que el du (1) predeterminado. Muestra lo que ha sucedido desde la última ejecución y muestra el tamaño del directorio y el porcentaje total. Es posible navegar y ascender a directorios utilizando teclas de cursor con navegador basado en texto (enlaces, enlaces, lince, etc.)

Captura de pantalla de gt5

En la sección "paquetes relacionados" de gt5 , encontré ncdu. De su descripción del paquete:

Ncdu es un du viewer basado en ncurses. Proporciona una interfaz rápida y fácil de usar a través de la famosa utilidad du. Permite navegar por los directorios y mostrar porcentajes de uso del disco con la biblioteca ncurses.

Captura de pantalla de ncdu

Lekensteyn
fuente
3
ncdu es muy rápido y justo lo que necesitaba, ¡gracias! También probé gt5, pero lo cancelé porque estaba "pensando" demasiado tiempo sin comentarios
Lukas
77
Santa mierda, ncdu es increíble, ¡gracias por compartir tus hallazgos!
Mientras-E
Me encantaría que ncdu fuera más fuerte. Lo necesito de vez en cuando y no recuerdo el nombre.
Martin Thoma
Basta de recordar comandos gracias a ncdu :)
Mr Coder
1
@matt No, el formato de salida para la -lssalida está codificado (consulte las funciones de código fuente pred_flsy list_file ). Puede intentar aproximar la salida utilizando la -printfopción, procesar la salida con awk o usar algo comofind ... -type f -exec ls -ldh {} \; | column -t
Lekensteyn,
33

Solo uso una combinación de duy 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

Luego se trata de enjuagar y repetir . Apunte a los subdirectorios que considere demasiado grandes, ejecute el comando para ellos y descubra qué está causando el problema.

Nota: Utilizo dula -xbandera de '' para mantener las cosas limitadas a un sistema de archivos (tengo una disposición bastante complicada de cosas de montaje cruzado entre SSD y RAID5).

Nota 2: 2>/dev/nullredirige cualquier mensaje de error al olvido. Si no te molestan, no es obligatorio.

Oli
fuente
1
Cuando ejecuto este comando du desciende a directorios secundarios. Desde la dupágina de manual: "Resuma el uso del disco de cada ARCHIVO, de forma recursiva para los directorios".
Jamie
26

Mi solución favorita utiliza una mezcla de varias de estas buenas respuestas.

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

du argumentos:

  • -apara "todos" los archivos y directorios. Déjalo solo para directorios
  • -BM para generar los tamaños en megabytes (M) tamaños de bloque (B)
  • 2>/dev/null - excluir mensajes de error de "permiso denegado" (gracias @Oli)

sort argumentos:

  • -n para "numérico"
  • -r para "reversa" (mayor a menor)

head argumentos:

  • -n 50 para los mejores 50 resultados.
  • Dejar fuera moresi usa un número más pequeño

Nota: Prefijo sudopara incluir directorios a los que su cuenta no tiene permiso de acceso.

Ejemplo que muestra los 10 archivos y directorios más grandes en / var (incluido el total general).

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
Dan King
fuente
11

Para mostrar los directorios más grandes del top 20 (recursivamente) en la carpeta actual, use el siguiente one-liner:

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

o (más orientado a Unix):

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

Para los 20 archivos más grandes del directorio actual (recursivamente):

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

o con tamaños legibles por humanos:

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

Tenga en cuenta que solo -hestá disponible para GNU sort, por lo que para que funcione correctamente en OSX / BSD, debe instalarlo desde coreutils. Luego agregue su carpeta a su PATH.

Por lo tanto, estos alias son útiles para tener en sus archivos rc (cada vez que lo necesite):

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

La respuesta de qbi es correcta, pero será muy lenta cuando haya muchos archivos, ya que comenzará un nuevo proceso ls para cada elemento.

una versión mucho más rápida que usa find sin generar procesos secundarios sería usar printf para imprimir el tamaño en bytes (% s) y la ruta (% p)

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

kon
fuente
1
Confirme que esto es mucho más rápido
Cookie
8

Esta parece ser la aplicación perfecta para find:

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

Este comando encontrará todos los archivos en el directorio $DIRECTORYy los ejecutará ls -s. El último comando imprime el tamaño asignado de un archivo más el nombre del archivo. El resultado se ordena numéricamente y se muestran las últimas cinco entradas. Por lo tanto, verá los 5 archivos más grandes $DIRETORYo cualquier subdirectorio. Si ingresa tail -n 1, verá solo el archivo más grande.

Además puedes jugar mucho con find. Por ejemplo, puede buscar archivos que tengan menos de n días ( -ctime -n) o que pertenezcan a usuarios especiales ( -user johndoe).

qbi
fuente
5

Cuando necesito hacer más espacio libre en los servidores, uso este comando. Encuentra todos los archivos más grandes que 50 MB y "du -h" hace una mejor lista de archivos y "sort -n" después de la lista de tuberías, ordenada numéricamente por tamaño de archivo.

find / -size +50M -type f -exec du -h {} \; | sort -n
zorbon.cz
fuente
1

Pruebe Baobab, le brinda una descripción gráfica de los archivos y carpetas, puede ver dónde están los cerdos del espacio real y eliminarlos con un clic https://help.ubuntu.com/community/Baobab

Oliver Hoffmann
fuente
2
En esta pregunta en particular, el OP prefiere un método de línea de comando. Ver los comentarios a la pregunta. También editaré la pregunta.
1

Para encontrar todos los archivos GB, por ejemplo, usaría du y grep, aunque los otros métodos mencionados aquí también parecen geniales.

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

También puedes ponerte elegante con la opción --except que du tiene.

dermen
fuente
0

También puede ordenar los archivos por tamaño:

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

Encuentra solo archivos y se ejecuta du -hpara cada archivo, que muestra el tamaño del archivo. Por último, clasificamos la salida de find/ de duacuerdo con la primera columna (en formato legible para humanos).

El último archivo impreso es el más grande.

Peregring-lk
fuente
0

Puedes usar el comando para ver los archivos más grandes mientras saltas los directorios:

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

Para encontrar todos los archivos que son más grandes que 100MiB (esto no es 100MB, vea aquí si está confundido):

find / -size +100M -ls

El siguiente comando mostrará los 5 archivos más grandes de la carpeta $DIRECTORY:

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

USO du: El siguiente comando que usa du, muestra los directorios con los 20 tamaños más grandes en la carpeta de trabajo de inicio:

sudo du -a /home | sort -n -r | head -n 20

Ahora para mostrar los directorios / archivos más grandes, incluidas las subcarpetas, ejecute:

du -Sh | sort -rh | head -n 10

Utilizando ls:

Para enumerar los 5 archivos más grandes en el directorio / bin, emita el siguiente comando:

ls -lSh /bin | head -5

También puede usar el Analizador de uso de disco o Baobao como se muestra aquí, por ejemplo.

Zezo
fuente
0

Una herramienta excelente y fácil de usar a la que se hace referencia en la respuesta a una pregunta similar es la NCurses Disk Usageherramienta:

sudo ncdu /
janoside
fuente
Bueno, comenzar en la raíz del sistema de archivos fue exactamente lo contrario de inútil para mí. Me permitió identificar los lugares más importantes a los que apuntar para ahorrar espacio en todo el sistema de archivos. De todos modos, puede usar lo mencionado para comenzar en cualquier directorio. Echa un vistazo a los documentos de esa herramienta. Pero, según lo solicitado, aquí está el enlace a la respuesta de origen .
janoside