Al trabajar con cualquier tipo de sistema (sobre todo cuando lo hacemos en máquinas virtuales, contenedores docker o similares) tenemos un espacio de disco limitado, y es muy frecuente que nos quedemos sin espacio libre después de instalar varios paquetes o generar ficheros grandes como contenido multimedia o logs y registros de gran tamaño.
Por lo tanto, sería interesante conocer algunos comandos para conocer cuanto espacio de disco estamos usando, cuanto espacio libre tenemos y que paquetes, carpetas o ficheros son los que más ocupan, facilitándonos la tarea de saber por donde atacar y eliminar datos para hacer espacio libre.
Espacio en disco libre
El comando df
El comando df
(disk free) nos informa del espacio libre en cada partición del disco. Así pues, la salida del comando df
en un sistema Linux sobre WSL, mostraría algo similar a lo siguiente (entre otras entradas):
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sdc 251G 19G 220G 8% /
tmpfs 3,9G 0 3,9G 0% /wsl
/dev/sdb 251G 12G 227G 5% /wsl/docker-desktop-data/isocache
none 3,9G 12K 3,9G 1% /wsl/docker-desktop/shared-sockets/host-services
/dev/sda 251G 117M 239G 1% /wsl/docker-desktop/docker-desktop-proxy
/dev/loop0 246M 246M 0 100% /wsl/docker-desktop/cli-tools
tools 111G 106G 5,3G 96% /init
none 3,9G 0 3,9G 0% /dev
tmpfs 3,9G 0 3,9G 0% /sys/fs/cgroup
C:\ 111G 106G 5,3G 96% /c
Obsérvese que en la columna Size
se nos muestra el tamaño total de cada partición de disco, mientras que en la siguiente se nos muestra el tamaño del espacio ocupado y en la siguiente el tamaño del espacio libre. A modo de resumen, la siguiente columna nos muestra el porcentaje de espacio utilizado. Esto nos da una idea del espacio en disco que nos queda en cada partición.
Nota: Obviamente, debemos conocer un poco el sistema que estamos utilizando para saber que particiones son las que nos interesan. Generalmente, los dispositivos que comienzan por
/dev/sd
son los discos físicos del sistema, como por ejemplo, en este caso seríansda
,sdb
ysdc
. Un cuarto disco conectado se etiquetaría comosdd
.
Los parámetros más interesantes del comando df
podrían ser los siguientes:
Opción | Significado |
---|---|
-h | Formato humano. Añade la letra de la unidad (K = Kibibytes, M = Mebibytes, ...). 1KiB= 1024 bytes. |
-H , --si | Formato humano. Añade la letra de la unidad (K = Kilobytes, M = Megabytes, ...). 1kB= 1000 bytes. |
-T | Muestra el tipo de sistema de ficheros de la partición de disco. |
Espacio en disco usado
El comando du
Sin embargo, podemos querer rizar el rizo y hacer justo la operación opuesta. En lugar de ver el espacio libre en disco, querer ver el espacio ocupado en disco de una forma un poco más minuciosa. Esta aproximación nos permite que podamos ver el tamaño ocupado por carpetas del sistema y tener una idea más aproximada de donde estamos invirtiendo más espacio en disco.
Para ello, utilizaremos el comando du
(disk usage), que recorrerá el disco a partir de la ruta que le indiquemos (o de la carpeta actual si no se indica ruta), mostrándonos el tamaño que ocupa cada carpeta encontrada.
$ du -h --max-depth 1
4.0K ./home
4.0K ./srv
1.4M ./etc
4.0K ./opt
32K ./root
12M ./lib
4.0K ./mnt
196M ./usr
4.0K ./media
4.0K ./lib64
0 ./sys
0 ./dev
5.2M ./sbin
4.0K ./boot
6.5M ./bin
8.0K ./run
0 ./proc
4.0K ./tmp
26M ./var
246M .
En este ejemplo, nos hemos colocado en la ruta raíz de todo el sistema /
y hemos utilizado el parámetro --max-depth
establecido a 1, para que sólo mire un nivel de profundidad de carpetas, y no siga mirando subcarpetas, ya que en caso de no establecerlo, lo haría de forma recursiva, entrando en cada subcarpeta sucesivamente.
Al final, nos muestra el tamaño total ocupado, es decir, la suma de todas las carpetas anteriores.
Nota: Esto es una buena forma de analizar el espacio usado en disco por carpetas, y donde es más probable que tengamos más oportunidades para liberar espacio en disco.
Algunos parámetros interesantes del comando du
son los siguientes:
Opción | Significado |
---|---|
-a | Muestra también ficheros, no sólo carpetas. |
-h | Formato humano. Añade la letra de la unidad. 1KiB= 1024 bytes. |
-H , --si | Formato humano. Añade la letra de la unidad. 1kB= 1000 bytes. |
-b , -k , -m | Muestra el tamaño en -b bytes, -k kilobytes o -m megabytes, sin letra. |
--max-depth [n] | Sólo avanza el nivel n de profundidad en subcarpetas. |
El comando ncdu
Existe una versión mejorada del comando du
llamada ncdu
(nCurses du). Se trata de una versión que añade ciertos detalles y muestra la información en paneles de texto de forma un poco más agradable y visuales, permitiendo moverse de forma interactiva por las carpetas y realizando ciertas tareas:
La primera columna nos muestra el tamaño total que ocupa dicha carpeta (y todas sus subcarpetas), la columna que le sigue a continuación refleja el porcentaje sobre el resto de carpetas. Existe otra columna numérica que nos indica el número de ítems (ficheros y carpetas) que incluye dicha carpeta.
Opción | Significado |
---|---|
--color [tema] | Muestra la interfaz con un tema concreto. Opciones posibles: off y dark . |
-o [fichero] | En lugar de mostrar por pantalla, guarda los resultados en un fichero JSON. |
-f [fichero] | Carga los datos del fichero JSON indicado (guardado por el método anterior). |
--si | Usa potencias de 1000 (KB, MB...) en lugar de potencias de 1024 (KiB, MiB...). |
Recuerda que puedes manejar la interfaz interactiva de ncdu
con los siguientes atajos rápidos, moviéndonos entre las carpetas y accediendo a ellas:
Atajo | Acción |
---|---|
k / ↑ | Retroceder al fichero o carpeta anterior. |
j / ↓ | Avanzar al fichero o carpeta siguiente. |
ENTER | Acceder a la carpeta seleccionada y ver su contenido. |
i | Información sobre la carpeta o fichero |
n | Ordena por nombre (orden alfabético). |
s | Ordena por tamaño ocupado de la carpeta. |
C | Ordena por número de items que contiene. |
d | Borrar carpeta o fichero. |
g | Mostrar porcentaje en disco |
c | Mostrar la cantidad de archivos y carpetas que contiene |
El comando dutree
Otra alternativa que nos puede resultar interesantes es dutree
. Está desarrollada en Rust, y puede instalarse con cargo install dutree
. Tiene un enfoque más básico y menos interactivo que ncdu
pero puede resultar más interesante o flexible en algunos casos.
Por ejemplo, en la imagen anterior le pedimos a dutree
que nos muestre solo las carpetas del primer nivel de profundidad con --depth=1
, mientras que le decimos que descarte y agrupe todas las carpetas que ocupen menos de 20 MiB con --aggr=20M
.
Otros parámetros interesantes podrían ser --no-hidden
que excluye los ficheros ocultos (los que empiezan por .
) o --files-only
que excluye las carpetas y se centra en ficheros, por si lo que queremos es analizar el contenido de la carpeta actual y no centrarnos en subcarpetas.
Otro comando muy similar es du-dust (dust), el cuál también está desarrollado en Rust.