Comando watch: uso, intervallo -n, evidenziazione -d e uscita quando l'output cambia

Ambiente di testFamiglia RHELAlmaLinux 9.8procps-ng 3.3.17account rootDebian 12 · procps-ng 4.0.2 account normale
Comandi per processi · pianificazionewatchPosizione/usr/bin/watchVerificato il 2026-11-05
Osservare i cambiamenti nell'output di un comando

Il comando watch è un comando Linux che riesegue un comando indicato ogni 2 secondi e ridisegna il suo output su tutto lo schermo del terminale. Osservando con watch dei file su un server AlmaLinux 9 mentre venivano modificati da un'altra finestra, l'opzione -d ha evidenziato i caratteri cambiati e l'opzione -g ha chiuso watch dopo il cambiamento dell'output.

L'output qui sotto proviene da una cartella di lavoro su un server AlmaLinux 9.8, eseguito come root; su un server Debian 12 è stata verificata solo la versione. Il nome host nella riga di intestazione in cima allo schermo è stato sostituito con il valore di esempio server1, e gli orari sono in UTC.

1️⃣ Come usare il comando watch

  • ↪️ Intervallo predefinito di 2 secondi e uscita con Ctrl+C

Scrivi dopo watch il comando da rieseguire; senza opzioni, watch lo esegue ogni 2 secondi e sostituisce lo schermo con il nuovo output. Osservando date è comparsa in cima allo schermo una riga di intestazione e, dopo una riga vuota, l'output di date.

watch date
Every 2.0s: date                                                   server1: Thu Oct 29 02:28:07 2026

Thu Oct 29 02:28:07 UTC 2026

La parte sinistra della riga di intestazione riporta l'intervallo di aggiornamento e il comando in esecuzione; la parte destra il nome host e l'ora dell'ultima esecuzione. Guardando di nuovo lo stesso schermo 2 secondi dopo, l'ora nell'intestazione e l'output di date erano cambiati insieme.

Every 2.0s: date                                                   server1: Thu Oct 29 02:28:09 2026

Thu Oct 29 02:28:09 UTC 2026

watch continua a girare finché non lo chiudi tu, quindi si chiude con Ctrl+C. Premendo Ctrl+C lo schermo di watch è sparito ed è tornato il prompt. Il codice di uscita controllato subito dopo era 0.

echo $?
0

watch serve a ripetere comandi che stampano una volta e poi terminano. Per vedere come cambia l'uso di CPU e memoria di ogni processo è più adatto il comando top, che ridisegna da solo lo schermo.

watch fa parte del pacchetto procps-ng. La versione si controlla con [watch -v]: era 3.3.17 sul server AlmaLinux 9.8 e 4.0.2 sul server Debian 12.

watch -v
watch from procps-ng 3.3.17
watch -v
watch from procps-ng 4.0.2

2️⃣ Opzioni di intervallo ed evidenziazione di watch

  • ↪️ Intervallo -n, evidenziazione -d e -t per nascondere l'intestazione

Un numero di secondi dopo -n cambia l'intervallo di aggiornamento. Con [watch -n 1 date] la parte sinistra dell'intestazione è diventata Every 1.0s.

watch -n 1 date
Every 1.0s: date                                                   server1: Thu Oct 29 02:28:15 2026

Thu Oct 29 02:28:15 UTC 2026

Secondo la pagina man, l'intervallo non può essere più breve di 0,1 secondi e i valori più piccoli diventano 0,1 secondi. Come separatore decimale vengono riconosciuti sia il punto sia la virgola.

-d evidenzia i caratteri diversi rispetto all'aggiornamento precedente. Mentre size.log nella cartella di lavoro veniva osservato con [ls -l], da un'altra finestra è stata aggiunta una riga al file.

watch -d -n 1 ls -l size.log
Every 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.log
printf 'line 2\n' >> size.log

Quando la dimensione del file è passata da 7 a 14, è stato evidenziato tutto dalla colonna della dimensione fino alla fine della riga. Il numero ha guadagnato una cifra, quindi tutti i caratteri successivi si sono spostati di una posizione. All'aggiornamento seguente il valore è rimasto uguale e l'evidenziazione è sparita.

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.log

Per continuare a evidenziare tutto ciò che è cambiato dalla prima esecuzione, usa [--differences=permanent] (secondo la pagina man).

-t rimuove la riga di intestazione e la riga vuota sottostante, lasciando solo l'output del comando.

watch -t -n 1 date
Thu Oct 29 02:28:19 UTC 2026

3️⃣ Condizioni di uscita e opzioni del comando watch

  • ↪️ -g per i cambiamenti dell'output e -e per gli errori

-g chiude watch quando l'output del comando cambia. Si usa per aspettare che cambi il contenuto di un file di stato prima di passare all'attività successiva.

watch -g -n 1 cat status.txt
Every 1.0s: cat status.txt                                         server1: Thu Oct 29 02:29:12 2026

running

Da un'altra finestra, il comando qui sotto ha cambiato il contenuto di status.txt in done.

printf 'done\n' > status.txt

A quel punto watch si è chiuso, è tornato il prompt e il codice di uscita era 0.

echo $?
0

-e blocca lo schermo quando il comando termina con un codice di uscita diverso da 0. Osservando con ls un file che non esiste nella cartella di lavoro, sono comparsi l'output di errore di ls e, nell'ultima riga dello schermo, un avviso che premendo un tasto si esce.

watch -e -n 1 ls nofile.txt
Every 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 exit

L'ora nell'intestazione è rimasta ferma al momento subito dopo l'esecuzione, e premendo un tasto watch si è chiuso. Questa volta il codice di uscita era 8.

echo $?
8

La pagina man descrive il codice di uscita 8 come un valore che comprende il caso in cui il comando è terminato con un errore.

📌 Opzioni principali: risultati di questo articolo

OpzioneCompitoRisultato in questo articolo
-n secondiCambia l'intervallo di aggiornamento (predefinito 2 secondi)L'intestazione è diventata Every 1.0s
-dEvidenzia i caratteri diversi rispetto all'aggiornamento precedenteCon la dimensione 7 → 14, evidenziato da quella colonna a fine riga, sparito all'aggiornamento seguente
-tNasconde la riga di intestazione e la riga vuota sottostanteResta solo una riga di output di date
-gChiude watch quando l'output cambiaChiuso dopo running → done, codice di uscita 0
-eBlocca lo schermo quando il comando termina con un erroreChiuso premendo un tasto, codice di uscita 8
-vStampa le informazioni sulla versionewatch from procps-ng 3.3.17 sul server AlmaLinux 9.8, watch from procps-ng 4.0.2 sul server Debian 12

📎 Altre opzioni: secondo il manuale ufficiale

OpzioneCompito
-bEmette un segnale acustico quando il comando termina con un codice di uscita diverso da 0
-cInterpreta i codici ANSI di colore e stile per mantenere i colori dell'output del comando
-pEsegue a ogni intervallo così l'ora di aggiornamento non slitta in avanti
-xEsegue il comando con exec invece di sh -c, così servono meno virgolette
-wTaglia le righe lunghe invece di mandarle a capo
--differences=permanentContinua a evidenziare tutto ciò che è cambiato dalla prima esecuzione
-hMostra l'aiuto

4️⃣ Virgolette e pipe nel comando watch

  • ↪️ Racchiudere tra virgolette singole e osservare l'uso del disco

watch esegue il comando ricevuto con sh -c, quindi un comando che contiene una pipe(|) o un $ va racchiuso per intero tra virgolette singole. Osservando il numero di file nella cartella di lavoro con [ls | wc -l], l'intestazione ha mostrato l'intero comando, pipe compresa.

watch -n 1 'ls | wc -l'
Every 1.0s: ls | wc -l                                             server1: Thu Oct 29 02:30:22 2026

6

Creando un altro file da un'altra finestra, all'aggiornamento seguente il numero è passato da 6 a 7.

printf 'c\n' > q3.txt
Every 1.0s: ls | wc -l                                             server1: Thu Oct 29 02:30:24 2026

7

Se scrivi [watch -n 1 ls | wc -l] senza virgolette, la shell divide prima la pipe e tutto l'output a schermo di watch passa a wc. Per questo, quando il comando da osservare contiene una pipe, racchiudi l'intero comando tra virgolette.

$ segue la stessa regola. Eseguendo [watch -n 1 echo $$] senza virgolette, la shell attuale ha sostituito prima $$ con un numero, e quel numero è comparso anche nel comando dell'intestazione.

watch -n 1 echo $$
Every 1.0s: echo 3755802                                           server1: Thu Oct 29 02:29:37 2026

3755802

Tra virgolette singole $$ passa così com'è, quindi l'intestazione ha mostrato echo $$ e a ogni aggiornamento è stato stampato il PID della sh appena avviata.

watch -n 1 'echo $$'
Every 1.0s: echo $$                                                server1: Thu Oct 29 02:29:40 2026

3756270
Every 1.0s: echo $$                                                server1: Thu Oct 29 02:29:41 2026

3756333

Il PID della shell attuale, controllato con [echo $$], era lo stesso numero rimasto fisso nell'esecuzione senza virgolette.

echo $$
3755802

I valori che cambiano lentamente, come l'uso del disco, si osservano con un intervallo di qualche secondo. Comando du: -s mostra solo il totale e -h mostra le dimensioni in unità come K e M. Mentre la cartella di lavoro veniva osservata con [du -sh .], aggiungendo 8.001 byte a un file di log da un'altra finestra, all'aggiornamento seguente 28K è diventato 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.log
Every 2.0s: du -sh .                                               server1: Thu Oct 29 02:30:36 2026

36K     .

🔲 Simulatore del comando watch

Nel simulatore qui sotto, esegui watch e poi modifica i file con i chip [🖊 Altra finestra] per vedere da te come cambia lo schermo.

Simulatore del comando watchprocps-ng 3.3.17
[root@server work]#
Funziona solo nel tuo browser. Nella schermata di watch, modifica i file con i chip [Altra finestra] ed esci con Ctrl+C.

🔢 FAQ & contenuti consigliati

Secondo la pagina man, se metti un numero di secondi nella variabile d'ambiente WATCH_INTERVAL, quel valore viene usato come intervallo quando -n non è indicato. Il valore segue le stesse regole di -n, quindi non può essere più breve di 0,1 secondi.

Secondo la pagina man, watch rimuove i caratteri di controllo dall'output prima di disegnarlo. Per vedere i colori quando osservi un comando con output colorato, aggiungi -c, come in [watch -c].

Secondo la pagina man, in un'esecuzione normale la frazione di secondo dell'ora di aggiornamento cresce un po' a ogni aggiornamento. Con -p watch esegue a ogni intervallo e quella frazione resta quasi uguale.

ℹ️ Informativa sull'affiliazione
I contenuti di questo sito includono link di affiliazione. Se un visitatore acquista un prodotto o un servizio tramite uno di questi link, il sito riceve una commissione dal venditore. In questo processo l'importo pagato dall'acquirente (durante le promozioni l'importo scende↓) non aumenta. Prezzi, sconti e disponibilità indicati si riferiscono al momento della stesura e possono differire da quelli reali: prima di acquistare verifica sempre presso il venditore. I prodotti vengono scelti e valutati secondo criteri propri, e le commissioni non influiscono sull'ordine di presentazione né sul contenuto delle valutazioni.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Dimostra di essere umano: 9   +   5   =