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
Los tutoriales aquí en LibreByte están disponible bajo una licencia de software libre. Si le gusta mi trabajo considere:
Comprar un Hosting/VPS o Servidor Dedicado en MCKHost

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

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