Repetición de comandos en Linux

LinuxBeginner
Practicar Ahora

Introducción

El comando watch es una poderosa utilidad en los sistemas Linux que permite a los usuarios ejecutar un comando periódicamente y mostrar su salida en la terminal. Esta herramienta es especialmente útil para monitorear los recursos del sistema, seguir los cambios en archivos o observar cualquier proceso que produzca salida a intervalos regulares.

En este laboratorio (lab), aprenderás cómo usar el comando watch para automatizar tareas repetitivas y monitorear los cambios del sistema. Comprenderás su sintaxis, opciones y aplicaciones prácticas en escenarios del mundo real. Al final de este laboratorio, podrás configurar procesos de monitoreo automatizados para observar eficientemente los cambios en tu sistema.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel principiante con una tasa de finalización del 100%. Ha recibido una tasa de reseñas positivas del 100% por parte de los estudiantes.

Comprendiendo los conceptos básicos del comando watch

El comando watch te permite ejecutar otro comando repetidamente en intervalos especificados. Esto es útil cuando necesitas monitorear una situación en cambio o observar la salida de un comando a lo largo del tiempo.

Comencemos explorando la sintaxis básica del comando watch:

watch [options] command

Opciones comunes incluyen:

  • -n <seconds>: Especifica el intervalo de actualización en segundos (el valor predeterminado es 2 segundos)
  • -d: Resalta los cambios entre actualizaciones
  • -t: Desactiva el encabezado que muestra el comando y la hora actual

Vamos a crear un ejemplo sencillo para demostrar cómo funciona watch. Primero, navega a tu directorio de trabajo:

cd ~/project

Ahora, creemos un script sencillo que genere un número aleatorio cada vez que se ejecuta. Esto nos ayudará a visualizar cómo watch repite comandos. Crea un archivo llamado generate_number.sh con el siguiente contenido:

nano ~/project/generate_number.sh

En el editor nano, escribe el siguiente contenido:

#!/bin/bash
echo "Random number: $((RANDOM % 100 + 1))" > ~/project/number.txt
cat ~/project/number.txt

Presiona Ctrl+O seguido de Enter para guardar el archivo, luego Ctrl+X para salir de nano.

Ahora, haz el script ejecutable:

chmod +x ~/project/generate_number.sh

Ejecutemos el script una vez para ver qué hace:

~/project/generate_number.sh

La salida debe mostrar un número aleatorio entre 1 y 100.

Ahora, usemos el comando watch para ejecutar este script cada 3 segundos:

watch -n 3 ~/project/generate_number.sh

Verás que la salida del comando se actualiza cada 3 segundos, mostrando un nuevo número aleatorio cada vez. El encabezado en la parte superior muestra el comando que se está ejecutando y la hora actual.

Para salir del comando watch, presiona Ctrl+C.

Intentemos otro ejemplo con la opción -d para resaltar los cambios:

watch -n 3 -d ~/project/generate_number.sh

Observa cómo los cambios en la salida se resaltan entre actualizaciones. Esto es especialmente útil cuando se monitorean salidas grandes y necesitas identificar rápidamente qué ha cambiado.

Monitoreando recursos del sistema con watch

Uno de los usos más comunes del comando watch es el monitoreo de recursos del sistema. En este paso, aprenderás cómo usar watch para monitorear información básica del sistema.

Comencemos monitoreando el uso de memoria de tu sistema utilizando el comando free:

watch -n 2 free -m

El comando anterior mostrará el uso de memoria en megabytes (-m) y actualizará la salida cada 2 segundos. Esto es útil para monitorear el consumo de memoria a lo largo del tiempo.

Presiona Ctrl+C para salir del comando watch.

Ahora, monitoreemos el uso del disco:

watch -n 5 df -h

Este comando muestra el uso del disco en un formato legible por humanos (-h) y se actualiza cada 5 segundos. Puedes ver el espacio disponible y utilizado en las diferentes particiones de tu sistema.

Presiona Ctrl+C para salir del comando watch.

Exploremos otra aplicación útil monitoreando los procesos en ejecución en tu sistema:

watch -n 3 "ps aux | head -10"

Este comando muestra los 10 primeros procesos ordenados por uso de CPU y se actualiza cada 3 segundos. Observa que encerramos el comando complejo entre comillas para que funcione correctamente con watch.

Presiona Ctrl+C para salir del comando watch.

Creemos un directorio específico para monitorear cambios en archivos:

mkdir -p ~/project/monitor_dir
touch ~/project/monitor_dir/file1.txt

Ahora, usemos watch para monitorear el directorio en busca de cualquier cambio:

watch -n 2 "ls -l ~/project/monitor_dir"

Mantén este comando en ejecución en tu terminal. Ahora, abre una nueva terminal y crea un nuevo archivo en el directorio monitoreado:

touch ~/project/monitor_dir/file2.txt

Observa cómo el comando watch en la primera terminal se actualiza automáticamente para mostrar el nuevo archivo. Esto demuestra cómo se puede usar watch para monitorear cambios en un directorio en tiempo real.

Presiona Ctrl+C en la primera terminal para salir del comando watch.

Características avanzadas del comando watch

En este paso, aprenderás sobre algunas funciones avanzadas del comando watch que pueden hacer tus tareas de monitoreo más eficientes.

Comencemos explorando la opción -t, que desactiva el encabezado que muestra el comando y la hora actual:

watch -n 3 -t date

Observa que ahora el encabezado está oculto, lo que da una visualización más limpia centrada solo en la salida del comando. Esto es útil cuando quieres maximizar el espacio de pantalla para la salida.

Presiona Ctrl+C para salir.

A continuación, veamos cómo usar watch con la opción -g o --chgexit. Esta opción hace que watch se detenga cuando la salida del comando cambia:

touch ~/project/test_change.txt
watch -g -n 1 "ls -l ~/project/test_change.txt"

Mientras este comando está en ejecución, abre una nueva terminal y modifica el archivo:

echo "hello" > ~/project/test_change.txt

El comando watch en la primera terminal debe salir automáticamente cuando detecte el cambio en el archivo.

Creemos un ejemplo más práctico. Crearemos un script que simula un archivo de registro con errores ocasionales:

nano ~/project/simulate_logs.sh

En el editor nano, escribe el siguiente contenido:

#!/bin/bash
LOG_FILE=~/project/application.log

## Initialize log file
echo "Starting log simulation" > $LOG_FILE

## Generate simulated log entries
for i in {1..10}; do
  echo "[$(date)] - INFO: Normal operation $i" >> $LOG_FILE
  sleep 1

  ## Occasionally generate an error
  if ((i % 3 == 0)); then
    echo "[$(date)] - ERROR: Something went wrong!" >> $LOG_FILE
  fi
done

echo "Log simulation complete" >> $LOG_FILE

Guarda y sal de nano (Ctrl+O, Enter, Ctrl+X), luego haz el script ejecutable:

chmod +x ~/project/simulate_logs.sh

Ahora, usemos watch con grep para monitorear mensajes de error en el archivo de registro:

watch -n 1 "grep ERROR ~/project/application.log || echo 'No errors found'"

En otra terminal, ejecuta el script de simulación de registros:

~/project/simulate_logs.sh

Observa cómo la primera terminal muestra cuando aparecen mensajes de error en el archivo de registro. Este es un ejemplo práctico de cómo usar watch para monitorear registros en tiempo real.

Presiona Ctrl+C para salir del comando watch.

Finalmente, veamos cómo ejecutar watch en segundo plano y redirigir su salida a un archivo:

watch -n 5 date > ~/project/date_output.txt 2>&1 &

Este comando ejecuta el comando watch en segundo plano, actualizando la fecha cada 5 segundos y guardando la salida en un archivo. Puedes ver el contenido del archivo:

cat ~/project/date_output.txt

Para detener el proceso watch en segundo plano, encuentra su PID y deténlo:

ps aux | grep "watch -n 5 date"
kill <PID>  ## Replace <PID> with the actual process ID number

Estos ejemplos demuestran la versatilidad del comando watch para diversas tareas de monitoreo.

Resumen

En este laboratorio, has aprendido cómo usar el comando watch en Linux para ejecutar comandos repetidamente en intervalos especificados. Esta poderosa utilidad se puede utilizar para diversas tareas de monitoreo, lo que la convierte en una herramienta esencial tanto para administradores de sistemas como para usuarios de Linux.

Conceptos clave cubiertos en este laboratorio:

  1. Uso básico del comando watch con diversas opciones como -n para especificar el intervalo y -d para resaltar cambios.
  2. Monitoreo de recursos del sistema, como el uso de memoria, el espacio en disco y los procesos en ejecución, utilizando watch combinado con comandos como free, df y ps.
  3. Uso de watch para monitorear cambios en archivos y directorios en tiempo real.
  4. Funciones avanzadas de watch, incluyendo la ejecución sin encabezados (-t), la salida al detectar cambios (-g) y la combinación con otros comandos para necesidades de monitoreo específicas.
  5. Ejecución de watch en segundo plano y redirección de su salida a archivos.

El comando watch es una herramienta versátil que puede ahorrarte tiempo y esfuerzo cuando necesitas monitorear situaciones cambiantes o actualizar automáticamente las salidas de comandos. Su capacidad para trabajar con cualquier comando que produzca salida en el terminal lo hace adaptable a una amplia gama de escenarios, desde la administración de sistemas hasta el desarrollo y depuración de aplicaciones.