Un ejemplo práctico de los comandos du y awk

GNU/Linux

Hoy les traigo un truquillo interesante sobre elcomando du, el problema fue planteado por un amigo de la siguiente manera: Cómo puedo saber el espacio disponible en disco duro, le dije usa el comando df

$ df -h

Mi amigo ripostó, y si quiero saber que directorios son los que están ocupando mayor espacio en disco duro, usa el comando du le dije:

$ du -sh DIR/*

que para el caso en cuestión sería:

$ sudo du -sh /*

Y si quiero excluir una partición preguntó nuevamente, usa la opción --exclude

$ du -sh --exclude donde-esta-montada-la-particion /*

Por ejemplo podemos excluir home, proc, run

$ sudo du -sh --exclude /home --exclude=/proc --exclude /run /*

No muy conforme mi amigo volvió a la carga: eso resuelve parcialmente el problema porque si tengo muchas particiones y varios sevidores sería tedioso teclear una y otra vez la opción --exclude, sospechando que esta podría no ser la última pregunta :), le dije que habría que buscar alguna herramienta que permitiera hacer lo que realmente quería, pero luego pensé: esto se puede resolver con un script, así que aquí la solución (no obstante puede existir alguna herramienta que lo haga mejor), la lógica del script sería:

1. Leer el fichero fstab

2. Encontrar la entradas del fichero fstab que hacen referencia a particiones reales (excluir swap, bind, …)

3. Generar el fichero txt en /tmp con las entradas de particiones reales del fstab

4. Usar la opción -X del comando du para leer desde un fichero las entradas a excluir.

$ awk '$1 !~ /(^#)|^$/ && $3 !~ /(none|swap)/ && $2 != "/" {print $2} END {print "/proc\n/run\n/var/run\n/dev"}' /etc/fstab > /tmp/du-exclude.txt && sudo du -sh -X /tmp/du-exclude.txt /*

Expliquemos la sentencia anterior a partir del siguiente fichero fstab:

#
# /etc/fstab
# Created by anaconda on Thu Aug 25 11:37:07 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/lcmobile_group-root 	/                       ext4    defaults        1 1
/dev/mapper/lcmobile_group-home 	/home                   ext4    defaults,acl    1 2
/dev/mapper/lcmobile_group-swap 	swap                    swap    defaults        0 0
/home/sedlav/www 		        /var/www		none 	bind

1. awk lee el fichero fstab línea a línea.

2. La primera condición: $1 !~ /(^#)|^$/ excluye las líneas en blancos o las líneas que son comentarios.

3. La segunda condición $3 !~ /(none|swap)/ excluye las líneas que contiene none o swap en la 3era columna.

4. La tercera condición $2 != "/" incluye todas las líneas que difieren de / en la segunda columna.

5. awk imprime la columna 2 para las líneas que cumplen todas las condicione anteriores.

6. Una vez que awk termina de recorrer el fichero fstab agrega las líneas: /proc, /run, /var/run, /dev al fichero du-exclude.txt

7. du excluye todas los dirs encontrado en du-exclude.txt

Si ejecutamos los comandos anteriores el fichero du-exclude.txt quedaría:

/home
/proc
/run
/var/run
/dev

Lecturas recomendada

  • man du
  • man awk

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.