viernes, 2 de octubre de 2009

Obtener ocupación de partición

Todos los sistemas Unix-like tienen una serie de comandos comunes que, aunque por separado hacen pequeñas cosas, combinándolos consiguen preciados objetivos.

Voy a indicar la forma de obtener el porcentaje de uso de una partición, por ejemplo /home de nuestra máquina. Esto nos será de mucha utilidad cuando nos propongamos monitorizar las particiones un servidor:

df | grep /home | tr -s "  " " " | cut -d " " -f 5 | tr -d "%"

Aunque este tocho pueda parecer largo y poco comprensible, en realidad es muy sencillo y algunos de estos comandos los usaréis muchísimo en cientos de scripts.

Vayamos por partes:

1. df: muestra el uso de nuestras particiones. Su salida sería:
S.ficheros         Bloques de 1K   Usado    Dispon Uso% Montado en
/dev/sda1              7692876   3376756   3925344  47% /
tmpfs                   509272         0    509272   0% /lib/init/rw
varrun                  509272       116    509156   1% /var/run
varlock                 509272         0    509272   0% /var/lock
udev                    509272       144    509128   1% /dev
tmpfs                   509272       144    509128   1% /dev/shm
/dev/sda3            144173428  21509424 115340376  16% /home


Pero a nosotros solo nos interesa el valor de /home.

2. grep /home: Se queda con las líneas que contengan esa palabra. En nuestro caso es únicamente la que nos interesa.

3. tr -s "  " " ": Si os fijáis, df nos devuelve varias columnas separadas entre sí por espacios. Podríamos pensar que el porcentaje de uso de /home siempre aparecerá en el caracter 54 y/o 55, pero si nos vamos a otro PC o servidor esto puede cambiar. Así, nos interesará que la separación entre columna y columna sea tan solo de un espacio, para tenerlo todo controlado. Este comando sustituye toda pareja de espacios consecutivos que vea por uno solo. Por tanto, termina de ejecutarse cuando entre columna y columna nos queda solo un espacio.

En este punto, tras ejecutar df | grep /home | tr -s "  " " " tendríamos:

/dev/sda3 144173428 21509432 115340368 16% /home

4. cut -d " " -f 5: Ahora lo que hacemos con este comando es decir: queremos el campo (field) 5 (que es donde está el valor de ocupación) suponiendo el delimitador entre campo y campo " ". Con todos estos comandos enlazados, nos queda:

16%

5. tr -d "%": Por último, si no nos apetece que aparezca el símbolo de porcentaje, podemos eliminarlo con este comando (-d de delete):

16

Como nota decir que cada uno de estos comandos permite realizar muchas otras acciones, pudiéndose modificar con los parámetros que aceptan. Se recomienda leer las páginas del manual (man) para conocerlas en profundidad.

Recordad: esta sencilla técnica de obtener el valor de una columna la usaréis a menudo para muchos otros fines.