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