Ejemplo exótico del comando du

    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.

    Fork me on Github
    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



    Dejar un comentario

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