Comando watch: uso, intervalo -n, resaltado -d y salir cuando cambia la salida
El comando watch es un comando de Linux que vuelve a ejecutar un comando dado cada 2 segundos y redibuja su salida en toda la pantalla de la terminal. Al vigilar archivos con watch en un servidor AlmaLinux 9 mientras se cambiaban desde otra ventana, la opción -d resaltó los caracteres que cambiaron y la opción -g terminó watch cuando cambió la salida.
La salida de abajo procede de una carpeta de trabajo en un servidor AlmaLinux 9.8, ejecutada como root; en un servidor Debian 12 solo se comprobó la versión. El nombre de host de la línea de cabecera, arriba de la pantalla, se cambió por el valor de ejemplo server1, y las horas están en UTC.
1️⃣ Cómo usar el comando watch
Escribe después de watch el comando que quieres repetir; sin opciones, lo ejecuta cada 2 segundos y sustituye la pantalla por la nueva salida. Al vigilar date apareció una línea de cabecera arriba de la pantalla y, tras una línea vacía, la salida de date.
watch dateEvery 2.0s: date server1: Thu Oct 29 02:28:07 2026
Thu Oct 29 02:28:07 UTC 2026La parte izquierda de la línea de cabecera es el intervalo de actualización y el comando en ejecución; la derecha, el nombre de host y la hora de la última ejecución. Al mirar la misma pantalla 2 segundos después, la hora de la cabecera y la salida de date habían cambiado a la vez.
Every 2.0s: date server1: Thu Oct 29 02:28:09 2026
Thu Oct 29 02:28:09 UTC 2026watch sigue ejecutándose hasta que lo terminas tú, así que se termina con Ctrl+C. Al pulsar Ctrl+C desapareció la pantalla de watch y volvió el prompt. El código de salida comprobado justo después fue 0.
echo $?0watch sirve para repetir comandos que imprimen una vez y terminan. Para ver cómo cambia el uso de CPU y memoria de cada proceso es mejor el comando top, que redibuja su propia pantalla.
watch forma parte del paquete procps-ng. La versión se comprueba con [watch -v]: era 3.3.17 en el servidor AlmaLinux 9.8 y 4.0.2 en el servidor Debian 12.
watch -vwatch from procps-ng 3.3.17watch -vwatch from procps-ng 4.0.22️⃣ Opciones de intervalo y resaltado de watch
Si pones un número de segundos después de -n, cambia el intervalo de actualización. Al ejecutar [watch -n 1 date], la parte izquierda de la cabecera pasó a Every 1.0s.
watch -n 1 dateEvery 1.0s: date server1: Thu Oct 29 02:28:15 2026
Thu Oct 29 02:28:15 UTC 2026Según la página man, el intervalo no puede ser menor de 0,1 segundos y los valores más pequeños se cambian a 0,1 segundos. Como separador decimal se aceptan tanto el punto como la coma.
-d resalta los caracteres que difieren de la actualización anterior. Mientras se vigilaba size.log de la carpeta de trabajo con [ls -l], se añadió una línea al archivo desde otra ventana.
watch -d -n 1 ls -l size.logEvery 1.0s: ls -l size.log server1: Thu Oct 29 02:28:53 2026
-rw-r--r-- 1 root root 7 Oct 29 02:28 size.logprintf 'line 2\n' >> size.logCuando el tamaño del archivo pasó de 7 a 14, se resaltó todo desde la columna del tamaño hasta el final de la línea. El número ganó una cifra, así que todos los caracteres siguientes se desplazaron una posición. En la siguiente actualización el valor no cambió y el resaltado desapareció.
Every 1.0s: ls -l size.log server1: Thu Oct 29 02:28:54 2026
-rw-r--r-- 1 root root 14 Oct 29 02:28 size.logPara seguir resaltando todo lo que cambió desde la primera ejecución, usa [--differences=permanent] (según la página man).
-t quita la línea de cabecera y la línea vacía de debajo, y deja solo la salida del comando.
watch -t -n 1 dateThu Oct 29 02:28:19 UTC 20263️⃣ Condiciones de salida y opciones del comando watch
-g termina watch cuando cambia la salida del comando. Sirve para esperar a que cambie el contenido de un archivo de estado antes de pasar a la siguiente tarea.
watch -g -n 1 cat status.txtEvery 1.0s: cat status.txt server1: Thu Oct 29 02:29:12 2026
runningDesde otra ventana, el comando de abajo cambió el contenido de status.txt a done.
printf 'done\n' > status.txtEntonces watch terminó, volvió el prompt y el código de salida fue 0.
echo $?0-e congela la pantalla cuando el comando termina con un código de salida distinto de 0. Al vigilar con ls un archivo que no existe en la carpeta de trabajo, apareció la salida de error de ls y, en la última línea de la pantalla, un aviso de que al pulsar una tecla se sale.
watch -e -n 1 ls nofile.txtEvery 1.0s: ls nofile.txt server1: Thu Oct 29 02:29:18 2026
ls: cannot access 'nofile.txt': No such file or directory
command exit with a non-zero status, press a key to exitLa hora de la cabecera quedó fija en el momento justo después de la ejecución, y al pulsar una tecla watch terminó. El código de salida esta vez fue 8.
echo $?8La página man describe el código de salida 8 como un valor que incluye el caso en que el comando terminó con un error.
📌 Opciones principales: resultados de este artículo
| Opción | Tarea | Resultado en este artículo | |
|---|---|---|---|
| -n segundos | Cambia el intervalo de actualización (2 segundos por defecto) | La cabecera pasó a Every 1.0s | |
| -d | Resalta los caracteres que difieren de la actualización anterior | Con el tamaño 7 → 14, resaltado desde esa columna hasta el final de la línea; desapareció en la siguiente actualización | |
| -t | Quita la línea de cabecera y la línea vacía de debajo | Solo queda una línea de salida de date | |
| -g | Termina watch cuando cambia la salida | Terminó tras running → done, código de salida 0 | |
| -e | Congela la pantalla cuando el comando termina con error | Terminó al pulsar una tecla, código de salida 8 | |
| -v | Muestra la información de versión | watch from procps-ng 3.3.17 en el servidor AlmaLinux 9.8 y watch from procps-ng 4.0.2 en el servidor Debian 12 |
📎 Otras opciones: según el manual oficial
| Opción | Tarea | |
|---|---|---|
| -b | Emite un pitido cuando el comando termina con un código de salida distinto de 0 | |
| -c | Interpreta los códigos ANSI de color y estilo para mostrar la salida del comando con sus colores | |
| -p | Ejecuta en cada intervalo para que la hora de actualización no se retrase | |
| -x | Ejecuta el comando con exec en lugar de sh -c, con lo que hacen falta menos comillas | |
| -w | Corta las líneas largas en vez de pasarlas a la línea siguiente | |
| --differences=permanent | Sigue resaltando todo lo que cambió desde la primera ejecución | |
| -h | Muestra la ayuda |
4️⃣ Comillas y tuberías en el comando watch
watch ejecuta el comando que recibe con sh -c, así que un comando que contiene una tubería(|) o $ se encierra entero entre comillas simples. Al vigilar el número de archivos de la carpeta de trabajo con [ls | wc -l], la cabecera mostró el comando completo, tubería incluida.
watch -n 1 'ls | wc -l'Every 1.0s: ls | wc -l server1: Thu Oct 29 02:30:22 2026
6Al crear un archivo más desde otra ventana, en la siguiente actualización el número pasó de 6 a 7.
printf 'c\n' > q3.txtEvery 1.0s: ls | wc -l server1: Thu Oct 29 02:30:24 2026
7Si escribes [watch -n 1 ls | wc -l] sin comillas, el shell divide primero la tubería y toda la salida en pantalla de watch pasa a wc. Por eso, cuando el comando que quieres vigilar tiene una tubería, encierra el comando completo entre comillas.
$ sigue la misma regla. Al ejecutar [watch -n 1 echo $$] sin comillas, el shell actual convirtió primero $$ en un número, y ese número apareció también en el comando de la cabecera.
watch -n 1 echo $$Every 1.0s: echo 3755802 server1: Thu Oct 29 02:29:37 2026
3755802Con comillas simples, $$ pasa tal cual, así que la cabecera mostró echo $$ y en cada actualización se imprimió el PID del sh recién ejecutado.
watch -n 1 'echo $$'Every 1.0s: echo $$ server1: Thu Oct 29 02:29:40 2026
3756270Every 1.0s: echo $$ server1: Thu Oct 29 02:29:41 2026
3756333Al comprobar el PID del shell actual con [echo $$], salió el mismo número que había quedado fijo en la ejecución sin comillas.
echo $$3755802Los valores que cambian despacio, como el uso del disco, se vigilan con un intervalo de unos segundos. Comando du: -s muestra solo el total y -h muestra los tamaños en unidades como K y M. Mientras se vigilaba la carpeta de trabajo con [du -sh .], al añadir 8.001 bytes a un archivo de registro desde otra ventana, en la siguiente actualización 28K pasó a 36K.
watch -n 2 du -sh .Every 2.0s: du -sh . server1: Thu Oct 29 02:30:34 2026
28K .printf '000d\n' 0 >> grow.logEvery 2.0s: du -sh . server1: Thu Oct 29 02:30:36 2026
36K .🔲 Simulador del comando watch
En el simulador de abajo, ejecuta watch y cambia archivos con los chips [🖊 Otra ventana] para ver tú mismo cómo cambia la pantalla.
🔢 FAQ & contenido recomendado
Estado del sistema
Comando uptime de Linux (tiempo de actividad del servidor & carga media de 1, 5 y 15 minutos)
El comando uptime muestra en una línea cuánto tiempo lleva encendido el servidor y la carga media de 1, 5 y 15 minutos.
Texto
Comando head y comando tail de Linux
Los comandos head y tail muestran el principio y el final de un archivo. Para seguir el final de un registro que crece, usa [tail -f].
Disco
comando df
El comando df muestra el tamaño total, el uso y el espacio libre de cada sistema de archivos.
ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.