Linux / Comando / watch: repetir comandos y observar sus cambios
watch es un comando que ejecuta un comando especificado repetidamente a intervalos regulares y muestra los resultados actualizados en toda la pantalla del terminal. El intervalo de ejecución predeterminado es de 2 segundos, y se puede cambiar con -n y resaltar las partes que difieren de los resultados anteriores con -d.
Es útil para observar valores que cambian continuamente en un período corto, como el estado de memoria, disco, procesos o red. Para salir, normalmente se utiliza q o Ctrl+c.
¿Qué es el comando watch?
watch forma parte de procps-ng. Ejecuta repetidamente el comando y muestra su salida estándar y sus errores en la primera pantalla del terminal. La salida que excede ese espacio puede quedar oculta; para conservar registros completos, utilice una herramienta adecuada a ese fin.
En la parte superior de la pantalla básica se muestra información como el intervalo de ejecución, el comando ejecutado, el host, la hora y el estado de finalización. Si los resultados de la ejecución son más largos que la pantalla, algunas partes podrían no ser visibles, por lo que para rastrear registros largos o grandes volúmenes de salida, otras herramientas podrían ser más adecuadas.
El comportamiento básico y las opciones actuales se pueden consultar en el manual de watch(1) y en la fuente del manual de watch de procps-ng.
Sintaxis y uso básico
watch [OPCIONES] COMANDO [ARGUMENTOS...]
Si se ejecuta free -h repetidamente sin opciones, actualizará el uso de memoria cada 2 segundos de forma predeterminada.
watch free -h
Para ejecutarlo en intervalos de 1 segundo, agregue la opción -n.
watch -n 1 free -h
La opción watch debe colocarse antes del comando que se va a repetir. Las opciones colocadas después del comando generalmente se pasan como opciones del comando que se ejecuta repetidamente, no como watch.
Opciones de uso frecuente
| Opciones | Función | Formas de uso |
|---|---|---|
-n SEGUNDOS |
Especificación del intervalo de ejecución | Especifique valores en segundos, como con watch -n 1 COMANDO. |
-d |
Resaltar las partes que han cambiado | Muestra de manera destacada los caracteres que han cambiado en comparación con la pantalla anterior. |
-d=permanent |
Destacar cambios acumulativos | Continúa resaltando las partes que han cambiado al menos una vez desde la primera ejecución. |
-g |
Salir si la salida cambia | Se puede usar para esperar hasta que un archivo o estado cambie. |
-e |
Detener la actualización en caso de error de comando | Si el comando repetido termina en un estado distinto de 0, detiene la pantalla y sale después de la entrada de una tecla. |
-b |
Sonido de alerta en caso de error de comando | Si un comando repetido devuelve un estado distinto de 0, se hará sonar la campana del terminal. |
-p |
Intento de intervalo de inicio exacto | Se ejecuta según el intervalo especificado a partir del momento de inicio de la ejecución anterior. |
-t |
Ocultar título superior | Se reserva un poco más de espacio para mostrar los resultados del comando. |
-c |
Interpretación de colores ANSI | Muestra los colores y estilos compatibles que produce el comando repetido. |
-w |
Evitar el salto de línea de filas largas | Muestra las filas que exceden el ancho de la pantalla recortándolas en lugar de pasarlas a la siguiente línea. |
-x |
Ejecutar sin pasar por la shell | En lugar de sh -c, ejecute el programa directamente sin usar extensiones de shell ni tuberías. |
Las opciones admitidas pueden variar según la versión de procps-ng incluida en la distribución. Puede verificar las opciones disponibles en el sistema actual con el siguiente comando.
watch --help
watch --version
Controlar el intervalo y los cambios de salida
Especificar el intervalo de ejecución con -n
Después de -n o --interval, especifique un valor en segundos. También se pueden usar decimales, pero un intervalo demasiado corto puede causar una carga innecesaria en la CPU, el disco, la red y el servicio objetivo.
watch -n 0.5 date
watch -n 5 df -h
Si se omite el intervalo, el valor predeterminado es de 2 segundos. El manual actual de procps-ng aplica límites a valores excesivamente pequeños o grandes, y es recomendable verificar el rango específico en la versión instalada.
Resaltar las partes cambiadas con -d
-d resalta las partes que han cambiado comparando la pantalla actual con la pantalla anterior. Es útil al ver memoria que cambia rápidamente, estadísticas de procesos y de red.
watch -n 1 -d free -h
Para mostrar continuamente todas las posiciones que han cambiado después de la primera pantalla, use -d=permanent si la versión instalada lo soporta.
watch -n 1 -d=permanent free -h
Finalizar al cambiar con -g
-g o --chgexit finalizan watch si la salida visible en pantalla cambia. Puede usarse al esperar que cambie la hora de modificación de un archivo o el estado de una operación de distribución.
watch -g -n 1 'stat -c %Y /tmp/result.txt'
Si solo cambia la parte de la salida que se corta más allá del rango de la pantalla, es posible que no se detecte el cambio. Si la detección de cambios es importante para la automatización, es más seguro usar el estado de finalización del comando objetivo o herramientas de monitoreo dedicadas en lugar de comparar la salida en pantalla.
Por qué se necesitan comillas al usar pipes y la sintaxis del shell
Por defecto, watch ejecuta el comando recibido a través de sh -c. Para usar pipes, redirecciones, punto y coma, variables y comodines como parte de un comando repetido, es más claro rodear el comando completo con comillas simples.
Los comandos simples se transmiten tal cual
Los comandos sin tuberías ni redirecciones se pueden escribir directamente como se muestra a continuación.
watch -n 2 ls -lh /var/log
Las tuberías y las variables agrupan el comando completo
En el siguiente ejemplo, las comillas simples evitan que el shell actual procese primero la tubería y envían el comando completo al shell que se ejecutará repetidamente.
watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'
Las redirecciones o múltiples comandos también se agrupan de la misma manera.
watch -n 5 'date; df -h / /var'
-x ejecuta directamente el programa, sin el sh -c adicional de watch. Esto evita la interpretación posterior de tuberías o redirecciones; el shell desde el que lanza watch todavía puede expandir argumentos no protegidos antes de pasárselos. Mantenga las comillas necesarias para controlar esa primera expansión.
watch -x -n 2 ls -lh /var/log
El comportamiento general de las comillas se puede consultar en la documentación de comillas de GNU Bash.
Ejemplos que se usan con frecuencia en la práctica
| Objetivo de verificación | Descripción |
|---|---|
| Memoria | free -h actualiza el resultado cada 1 segundo y resalta las partes que han cambiado. |
| Espacio en disco | Verifica el uso de la raíz y del sistema de archivos /var cada 5 segundos. |
| Procesos que usan CPU | Ordena el resultado de ps por uso de CPU y ve los elementos principales. |
| Resumen de sockets | Verifica repetidamente el estado completo de los sockets de red con ss -s. |
| Tamaño del archivo | Observe los cambios en el tamaño de los archivos descargados o comprimidos con stat. |
| Estado del servicio | Ejecute repetidamente systemctl status junto con --no-pager. |
Uso de memoria
watch -n 1 -d free -h
Uso de disco
watch -n 5 'df -h / /var'
Procesos con alto uso de CPU
watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'
Resumen de sockets de red
watch -n 1 ss -s
Tamaño de archivo y hora de modificación
watch -n 1 'stat -c "%s bytes %y" archive.tar'
Estado del servicio
watch -n 2 'systemctl --no-pager --full status nginx'
Los comandos cuya salida puede ser larga, como el estado del servicio, pueden mostrarse solo parcialmente según el tamaño del terminal. Si el objetivo es un seguimiento continuo del registro, un comando adecuado para esa función, como journalctl -f -u nginx, es más apropiado.
Intervalo de ejecución exacto y comandos que toman mucho tiempo
En el funcionamiento básico, después de que finaliza la ejecución de un comando, se espera el intervalo especificado antes de iniciar la siguiente ejecución. Usando -p o --precise se intenta ajustar la hora de inicio siguiente basándose en el momento en que comenzó el comando anterior.
watch -p -n 10 'date; curl -fsS https://example.com/health'
El siguiente ejemplo usa una URL de muestra: https://example.com/health no representa un servicio de salud operativo que deba consultar. Sustitúyala por un endpoint propio, autorizado y de solo lectura antes de probarlo. Si una ejecución tarda más que el intervalo, watch espera a que termine; no garantiza una planificación exacta. Para tareas periódicas desatendidas, valore un temporizador de systemd o cron.
Control mediante teclado
| Tecla | Funcionamiento |
|---|---|
q |
Finaliza watch. Los comandos hijos en ejecución pueden no detenerse de inmediato. |
Ctrl+c |
Se envía una señal de interrupción para terminar watch y las tareas en ejecución. |
Space |
Se solicita ejecutar comandos sin esperar la próxima hora programada. Si ya se está ejecutando, se iniciará la siguiente ejecución inmediatamente después de completarla. |
Las acciones de las teclas pueden variar según la versión de procps-ng, por lo que primero verifique man watch en el sistema actual.
Precauciones al usar watch
- Priorizar comandos de verificación de solo lectura: Repetir comandos que cambian el estado, como eliminar, pagar, crear usuarios o reiniciar servicios, puede causar resultados no deseados.
- Evitar intervalos demasiado cortos: Ejecutar consultas a bases de datos, solicitudes a API remotas y búsquedas en grandes directorios con una frecuencia muy alta puede sobrecargar el sistema o servicios externos.
- Verificar el rango visible en la pantalla:
-gy-destán sujetos a la salida mostrada en la terminal, por lo que los cambios en áreas recortadas podrían no detectarse. - Evitar comandos interactivos: Programas que esperan entrada del usuario, como ingreso de contraseñas, editores o paginadores, no son adecuados para ejecución repetida.
- Clasificación del estado de finalización: El estado de éxito básico
watchno siempre significa que el comando repetido se haya completado con éxito. Si necesita reaccionar a un error de comando, consulte las opciones de la versión actual como-e.
Cuando otra herramienta es más adecuada que watch
| Propósito | Herramienta adecuada |
|---|---|
| Seguimiento de registros añadidos a un archivo | tail -f o tail -F |
| Seguimiento de registros del servicio systemd | journalctl -f -u SERVICIO |
| Verificación del uso de recursos del proceso | top o htop |
| Tareas repetidas a horas establecidas | timer de systemd o cron |
| Recopilación de indicadores a largo plazo y alertas | Sistema de monitoreo dedicado |
watch es adecuado para que una persona observe cambios durante un corto período de tiempo en la terminal. Si se necesita conservación de registros, alertas o análisis a largo plazo, se debe elegir la herramienta adecuada para ese propósito.
Preguntas frecuentes
Aparece que no existe el comando watch
watch generalmente forma parte de los paquetes procps o procps-ng. Puede que no esté en un entorno de instalación mínima, por lo que se debe instalar el paquete desde el gestor de paquetes de la distribución actual. Verifique el nombre del paquete y el comando de instalación en la documentación de la distribución.
Los alias o funciones de shell no se ejecutan dentro de watch
Los alias y funciones pueden estar definidos solo en el shell interactivo actual, y el entorno sh -c que watch llama por defecto puede no recibirlos. Para tareas repetitivas, es más predecible crearlas como archivos ejecutables reales, comandos explícitos o scripts separados de shell.
Los colores del comando no se muestran
Active watch -c para la interpretación de colores ANSI y configure los comandos repetidos para que también impriman códigos de color en entornos no interactivos. Dependiendo del programa, puede ser necesario una opción separada como --color=always.
¿Por qué deben estar entre comillas los comandos que incluyen tuberías?
Si no hay comillas, la shell actual procesará primero la tubería y toda la salida de watch podría pasarse a otro comando. Si se encierra toda la canalización entre comillas simples, watch puede pasar toda la cadena de comandos como un solo comando a la shell que la ejecutará repetidamente.
Resumen
watch es una herramienta de observación simple que muestra los resultados del comando de manera repetida en intervalos predeterminados de 2 segundos. Puede cambiar el intervalo con -n, resaltar cambios con -d y finalizar cuando la salida cambie usando -g.
Los comandos que incluyen tuberías y redirecciones deben encerrarse en comillas simples, y se debe verificar la carga y los efectos secundarios que la ejecución repetida puede tener en el sistema. Se puede consultar el propósito de otros comandos por tarea en la lista de comandos de Linux.




