DU (Disk Used)

Cuando usamos una distribución de Linux sin interfaz gráfica o remotamente ya sea a través de Telnet o SSH a veces necesitamos saber el tamaño de cierta carpeta y para ello disponemos del comando “du” (Disk Used).

Sintaxis

du [opción(es)] [ruta]

Este comando, usado sin opciones, indica el espacio total de almacenamiento utilizado por todos los archivos del directorio en el que nos encontremos. Si existen subdirectorios en él, también se indicará su tamaño total.

  • -a: Muestra el uso de espacio de cada archivo.
  • -k: Escribe el tamaño de los archivos en unidades de 1024 bytes, en vez de las unidades de 512 bytes por defecto.
  • -s: En vez de el output por defecto, informa sólo de la suma total de cada uno de los archivos especificados.
  • -L: Procesa los enlaces simbólicos usando el archivo o directorio al que el enlace simbólico referencia, en vez de el enlace en sí mismo.
  • -x: Cuando evalúa los tamaños de archivo, evalúa sólo esos archivos que tengan el mismo dispositivo que el archivo especificado en el operando.
  • -h: Listado en forma legible para el ser humano (KB, MB, GB…).
    • Ejemplo

      [SN@securitynull.net /SecurityNull]# du -lhsc ./copias_de_seguridad
      991M    .
      991M    total
      

      DF (Disk Free)

      También existe un comando similar llamado “df” (Disk Free), que nos muestra el tamaño total, libre y usado en cada unidad montada en el sistema, además de mostrar la ruta de montaje y el porcentaje de espacio usado.

      Sintaxis

      df [opción(es)] [sistema de archivos]

      Este comando muestra información sobre todos los sistemas de archivos montados (discos duros, cds, pen drives…).

      • -h: Listado en forma legible para el ser humano (KB, MB, GB…).
        • Ejemplo

          [SN@securitynull.net /SecurityNull]# df
          Filesystem                Size      Used Available Use% Mounted on
          /dev/ram                139.5M    115.1M     24.3M  83% /
          tmpfs                    64.0M    556.0k     63.5M   1% /tmp
          /dev/mapper/md0           3.6T      3.4T    2000.0G  95% /mnt/disk
          ...
          

          Script en Bash para listar en forma de árbol directorios

          Os dejo un script en Bash que desarrollé hace tiempo con el que se puede listar un directorio y todos sus subdirectorios y archivos (opcional), y también se puede aplicar un cheksum o hash en MD5 a cada archivo.

          #!/bin/bash
          
          app_name="Show Dirs Tree"
          app_version="1.0.0"
          app_author="Security Null"
          app_last_update="2013-03-10"
          app_usage="Usage: ./show_dir_tree.sh <list folder> [show files] [md5 checksum]"
          
          # Print app info
          echo $app_name $app_version
          echo
          
          # Set enviroment vars
          IFS=$'\n'
          
          lits_dir() {
                  for dir in `ls`
                  do
          
                          if [ -d "$dir" ]; then
                                  zz=0
                                  while [ $zz != $1 ]; do
                                          echo -n "| "
                                          zz=`expr $zz + 1`
                                  done
                          else
                                  if [ $show_files = 1 ]; then
                                          nfiles=`expr $nfiles + 1`
                                          zz=0
                                          while [ $zz != $1 ]; do
                                                  echo -n "| "
                                                  zz=`expr $zz + 1`
                                          done
                                  fi
                          fi
          
                          if [ -L "$dir" ]; then
                                  echo "+---$dir" `ls -l $dir | sed 's/^.*'$dir' //'`
                          else
                                  if [ -d "$dir" ]; then
                                          echo "+---$dir"
                                  else
                                          if [ $show_files = 1 ]; then
                                                  if [ "$md5_checksum" == "1" ]; then
                                                          md5sum=$(md5sum $dir)
                                                          md5sum=${md5sum:0:32}
                                                          echo "+---$dir ($md5sum)"
                                                  else
                                                          echo "+---$dir"
                                                  fi
                                          fi
                                  fi
                          fi
          
                          if [ -d "$dir" ]; then
                                  ndirs=`expr $ndirs + 1`
                                  if cd "$dir" ; then
                                          lits_dir `expr $1 + 1` $2
                                          cd ..
                                  fi
                          fi
          
                  done
          }
          
          if [ $# != 0 ]; then
                  cd $1
          fi
          
          if [ $# -ge 2 ]; then
                  show_files=1
          else
                  show_files=0
          fi
          
          if [ $# -eq 3 ]; then
                  md5_checksum=1
          fi
          
          echo "Dir = `pwd`"
          nfiles=0
          ndirs=0
          
          lits_dir 0 0
          echo "Total dirs = $ndirs (files: $nfiles)"
          
          exit 0
          

          Ejemplo

          Para listar solo las carpetas sin sus archivos:

          ./show_dir_tree.sh /ruta/de/la/carpeta
          

          Para listar las carpetas sin con sus archivos:

          ./show_dir_tree.sh /ruta/de/la/carpeta 1
          

          Para listar las carpetas con sus archivos y un checksum MD5 de cada archivo (Este método es el más lento, ya que cada hash MD5 tarda dependiendo del tamaño del archivo):

          ./show_dir_tree.sh /ruta/de/la/carpeta 1 1
          

          Probando…

          show_dir_tree.shshow_dir_tree.sh


          FUENTES

          http://linux.about.com/library/cmd/blcmdl1_du.htm
          http://linux.about.com/od/commands/l/blcmdl1_df.htm
          http://unidadlocal.com/Saber_tamano_de_carpeta_por_consola_en_Linux