Watch: repetir periódicamente la ejecución de un programa
Muchas veces nos encontramos en la necesidad de ejecutar repetidas veces un comando, siendo la forma más común de hacerlo la de escribir una y otra vez el mismo comando. Por suerte, existe en Linux una utilidad que se llama watch que hace precisamente esa tarea por nosotros. La forma de uso es extremadamente simple:
watch comando
Por ejemplo, si estamos copiando archivos desde otro lugar y deseamos hacer un ls de un directorio para controlar el ritmo de la copia se podría ejecutar:
watch ls
Que dará como salida:
Every 2.0s: ls Thu Nov 11 16:55:00 2010 netstorming ----------------------------------------------------------------- Every 2.0s: ls Thu Nov 11 16:55:04 2010 netstorming mikroways
Sin dudas, hay situaciones donde el watch es mucho más útil, espero entiendan que lo anterior fue sólo a modo de ejemplo.
Reemplazar cadenas en múltiples archivos
Para cualquier administrador de un sistema es muy común en muchas oportunidades encontrarse con la necesidad de cambiar una frase determinada en múltiples archivos de texto. Un ejemplo sería si cambiamos la IP de una máquina y luego debemos modificarla también en la configuración de múltiples servicios. Existen básicamente dos maneras de hacerlo: a mano, editando archivo por archivo, o automáticamente, mediante un script.
A continuación, valiéndonos sólo de comandos estándares de Unix realizaremos dicha tarea mediante el siguiente script. Supondremos que deseamos modificar la IP 192.168.1.5 por la 192.168.2.5 en todos los archivos que estén en el directorio /etc.
cd /etc
for i in `grep -R "192.168.1.5" * | cut -d : -f 1 | uniq`; do
sed -i s/"192.168.1.5"/"192.168.2.5"/g $i
done
Veamos qué hace el script anterior. La línea del grep busca recursivamente en todos los directorios aquellos archivos que contengan la cadena “192.168.1.5″, luego el cut se queda de esa línea sólo con el nombre del archivo y el uniq evita que el nombre del archivo aparezca repetido. Esto ocurriría si la cadena en cuestión aparece en más de una línea en algún archivo.
El sed es el que realiza el trabajo realmente. Veamos que se encuentra dentro de un bucle y va a ejecutarse para cada uno de los archivos encontrados por el comando grep. El primero de sus parámetros le indica que realice las modificaciones en el mismo archivo ya que el comportamiento por defecto es imprimir su contenido con los cambios en pantalla, pero sin modificarlo; en el segundo parámetro encontramos la letra s que dice que debe reemplazar la primer cadena por la segunda y la letra g indica que lo haga para todas las ocurrencias de la misma; el tercer parámetro es el archivo sobre el cuál se aplicará el sed, en este caso la variable $i.
¿Qué directorios ocupan más?
Algo muy común para un administrador de un sistema operativo es necesitar conocer qué directorios de su sistema ocupan más espacio. Esto puede ser porque sea necesario hacer lugar en el disco o para detectar usuarios con mucha ocupación en el mismo. A raíz de una necesidad semejante surgió un script muy sencillo que es el siguiente:
du -s -m * | sort -g -r | awk '{ if ($1 > 500) print "Tamaño (MB): "$1" - Archivo: "$2}'
Lo que hace el script anterior es calcular la ocupación en megas de cada archivo y directorio en el lugar desde donde se ejecuta, ordenar lo anterior de mayor a menor y luego, para aquellos archivos y directorios que ocupan más de 500MB, imprimir el tamaño ocupado y el nombre del archivo o directorio en cuestión.
Este tipo de scripts resultan útiles para llevar un control del sistema y pueden programarse en el cron para que se ejecuten mensualmente y envíen un mail con el reporte. ¡Qué les sea útil!



