Comando watch: uso, intervallo -n, evidenziazione -d e uscita quando l'output cambia
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
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 dateEvery 2.0s: date server1: Thu Oct 29 02:28:07 2026
Thu Oct 29 02:28:07 UTC 2026La 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 2026watch 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 $?0watch 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 -vwatch from procps-ng 3.3.17watch -vwatch from procps-ng 4.0.22️⃣ Opzioni di intervallo ed evidenziazione di watch
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 dateEvery 1.0s: date server1: Thu Oct 29 02:28:15 2026
Thu Oct 29 02:28:15 UTC 2026Secondo 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.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.logQuando 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.logPer 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 dateThu Oct 29 02:28:19 UTC 20263️⃣ Condizioni di uscita e opzioni del comando watch
-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.txtEvery 1.0s: cat status.txt server1: Thu Oct 29 02:29:12 2026
runningDa un'altra finestra, il comando qui sotto ha cambiato il contenuto di status.txt in done.
printf 'done\n' > status.txtA 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.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 exitL'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 $?8La 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
| Opzione | Compito | Risultato in questo articolo | |
|---|---|---|---|
| -n secondi | Cambia l'intervallo di aggiornamento (predefinito 2 secondi) | L'intestazione è diventata Every 1.0s | |
| -d | Evidenzia i caratteri diversi rispetto all'aggiornamento precedente | Con la dimensione 7 → 14, evidenziato da quella colonna a fine riga, sparito all'aggiornamento seguente | |
| -t | Nasconde la riga di intestazione e la riga vuota sottostante | Resta solo una riga di output di date | |
| -g | Chiude watch quando l'output cambia | Chiuso dopo running → done, codice di uscita 0 | |
| -e | Blocca lo schermo quando il comando termina con un errore | Chiuso premendo un tasto, codice di uscita 8 | |
| -v | Stampa le informazioni sulla versione | watch 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
| Opzione | Compito | |
|---|---|---|
| -b | Emette un segnale acustico quando il comando termina con un codice di uscita diverso da 0 | |
| -c | Interpreta i codici ANSI di colore e stile per mantenere i colori dell'output del comando | |
| -p | Esegue a ogni intervallo così l'ora di aggiornamento non slitta in avanti | |
| -x | Esegue il comando con exec invece di sh -c, così servono meno virgolette | |
| -w | Taglia le righe lunghe invece di mandarle a capo | |
| --differences=permanent | Continua a evidenziare tutto ciò che è cambiato dalla prima esecuzione | |
| -h | Mostra l'aiuto |
4️⃣ Virgolette e pipe nel comando watch
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
6Creando un altro file da un'altra finestra, all'aggiornamento seguente il numero è passato da 6 a 7.
printf 'c\n' > q3.txtEvery 1.0s: ls | wc -l server1: Thu Oct 29 02:30:24 2026
7Se 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
3755802Tra 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
3756270Every 1.0s: echo $$ server1: Thu Oct 29 02:29:41 2026
3756333Il PID della shell attuale, controllato con [echo $$], era lo stesso numero rimasto fisso nell'esecuzione senza virgolette.
echo $$3755802I 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.logEvery 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.
🔢 FAQ & contenuti consigliati
Stato del sistema
Comando uptime di Linux (tempo di attività del server & carico medio a 1, 5 e 15 minuti)
Il comando uptime mostra in una riga da quanto tempo è acceso il server e il carico medio a 1, 5 e 15 minuti.
Testo
Comandi head e tail di Linux
I comandi head e tail stampano l'inizio e la fine di un file. Per seguire la fine di un log che cresce, usa [tail -f].
Disco
Comando df
Il comando df stampa la dimensione totale, lo spazio usato e lo spazio libero di ogni file system.
ℹ️ 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.