Linux / Comando watch: repetir consultas e destacar mudanças
watch é um comando que executa repetidamente um comando especificado em intervalos regulares e atualiza toda a tela do terminal com os resultados. O intervalo de execução padrão é de 2 segundos, e você pode alterar o intervalo com -n e destacar as partes que mudaram em relação aos resultados anteriores com -d.
É útil para observar, por pouco tempo, mudanças na memória, no disco, nos processos ou na rede. Para sair, normalmente você usa q ou Ctrl+c.
O que é o comando watch?
watch é um programa incluído no conjunto de ferramentas procps-ng. Ele executa o comando repetidamente e mostra sua saída padrão e sua saída de erro, limitadas ao espaço visível do terminal. Assim, você acompanha o resultado sem digitar o mesmo comando várias vezes.
O cabeçalho apresenta informações da execução, como comando, intervalo ou horário e estado de saída; os campos exatos dependem da versão. Se os resultados da execução forem maiores que a tela, partes podem ficar ocultas, então outras ferramentas podem ser mais adequadas para acompanhar logs longos ou grandes quantidades de saída.
Você pode verificar o comportamento padrão e as opções atuais no manual watch(1) e no código-fonte do manual de watch no procps-ng.
Sintaxe básica e uso
Use um terminal Linux com watch instalado e confirme cada comando isoladamente antes de repeti-lo. Os exemplos usam utilitários GNU/procps-ng; consultas de rede e serviços também exigem as ferramentas correspondentes. Não é necessário executar toda consulta como administrador.
watch [option] command [command arguments...]
No esquema acima, [option] representa opções de watch, command é o programa e o último campo reúne seus argumentos; os colchetes não são digitados. O exemplo seguinte repete free -h a cada 2 segundos, salvo configuração diferente de WATCH_INTERVAL.
watch free -h
Para executar em intervalos de 1 segundo, adicione a opção -n.
watch -n 1 free -h
A tela mantém a tabela de memória e substitui os valores a cada atualização, sem acrescentar novas linhas ao histórico do terminal. Os números dependem da máquina; pressione Ctrl+c para encerrar. Para interpretar available, cache e swap, consulte a explicação do comando free.
As opções de watch devem ser colocadas antes do comando a ser repetido. Opções escritas após o comando geralmente são passadas para o comando repetido, não para watch.
Opções usadas com frequência
| Opção | Função | Uso |
|---|---|---|
-n segundos |
Especificar o intervalo de execução | Define um valor em segundos, como em watch -n 1 comando. |
-d |
Destacar as partes alteradas | Destaca os caracteres que foram alterados em comparação com a tela anterior. |
-d=permanent |
Destaque de alterações cumulativas | Continua destacando qualquer parte que tenha mudado pelo menos uma vez desde a primeira execução. |
-g |
Sair quando a saída mudar | Pode ser usado para esperar até que um arquivo ou status mude. |
-e |
Parar a atualização em caso de erro de comando | Se o comando repetido terminar com um status diferente de zero, ele pausa a tela e sai após pressionar uma tecla. |
-b |
Apitar em caso de erro de comando | Se o comando repetido retornar um estado diferente de zero, ele emitirá o sinal sonoro do terminal. |
-p |
Tentar intervalos de início exatos | Executar de acordo com o intervalo especificado com base no horário de início da execução anterior. |
-t |
Ocultar título superior | Libera o espaço do cabeçalho para mostrar os resultados do comando. |
-c |
Interpretar cores ANSI | Interpreta sequências de cor e estilo presentes na saída do comando. |
-w |
Evitar quebra de linha em linhas longas | Exibe linhas que excedem a largura da tela cortando-as em vez de quebrá-las para a linha seguinte. |
-x |
Executar sem passar pelo shell | Executa o programa diretamente, em vez de chamar sh -c; o comando repetido não interpreta sintaxe de shell. |
As opções suportadas podem variar dependendo da versão do procps-ng incluída na distribuição. Você pode verificar as opções disponíveis em seu sistema atual com o seguinte comando.
watch --help
watch --version
Como controlar o intervalo e as mudanças de saída
Definir o intervalo com -n
Especifique um valor em segundos após -n ou --interval. Você também pode usar decimais, mas um intervalo muito curto pode gerar carga desnecessária na CPU (unidade central de processamento), no disco, na rede e nos serviços consultados.
watch -n 0.5 date
watch -n 5 df -h
Sem -n, o padrão é 2 segundos, mas a variável de ambiente WATCH_INTERVAL pode definir outro valor. O manual atual limita o intervalo ao mínimo de 0,1 segundo e ao máximo de 31 dias; confirme os limites na versão instalada.
Destacar alterações com -d
-d destaca partes que foram alteradas comparando a tela atual com a anterior. Isso é conveniente ao visualizar estatísticas de memória, processos e rede que mudam rapidamente.
watch -n 1 -d free -h
Para exibir continuamente todos os locais alterados após a primeira tela, use -d=permanent se a versão instalada oferecer suporte.
watch -n 1 -d=permanent free -h
Encerrar quando a saída mudar com -g
-g ou --chgexit encerra watch quando a saída visível na tela muda. Pode ser usado ao aguardar alterações em horários de modificação de arquivos ou status de tarefas de implantação.
Para reproduzir o exemplo, use um arquivo descartável: se /tmp/result.txt ainda não existir, crie-o com touch /tmp/result.txt. Se esse caminho já estiver em uso, escolha outro e ajuste os dois comandos. Inicie a consulta abaixo; em outro terminal, execute sleep 2; touch /tmp/result.txt. O número retornado por stat -c %Y representa o horário de modificação em segundos; ao mudar, a consulta termina. Remova o arquivo depois somente se você o criou para esse teste.
watch -g -n 1 'stat -c %Y /tmp/result.txt'
Se a saída mudar apenas na parte que ficou fora da tela, as alterações podem não ser detectadas. Para automação onde a detecção de mudanças é crítica, é mais seguro usar o status de saída do comando alvo ou ferramentas de monitoramento dedicadas, em vez de comparar a saída da tela.
Por que aspas são necessárias ao usar pipes e sintaxe de shell
Por padrão, watch executa o comando passado através de sh -c. Se você quiser usar pipes, redirecionamento, ponto e vírgula, variáveis e curingas como parte do comando repetido, é mais claro envolver o comando inteiro entre aspas simples.
Comandos simples são passados como estão
Comandos sem pipes ou redirecionamento podem ser escritos diretamente assim.
watch -n 2 ls -lh /var/log
Agrupar pipes e variáveis na mesma expressão
No exemplo a seguir, aspas simples impedem que o shell atual processe o pipe primeiro e passam todo o comando para o shell que o executará repetidamente.
watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'
Agrupe redirecionamentos ou vários comandos da mesma forma.
watch -n 5 'date; df -h / /var'
A opção -x executa o programa diretamente, sem o shell interno. Pipes, redirecionamentos e expansões não são interpretados a cada repetição. O shell em que você digita a linha ainda pode expandir argumentos antes de iniciar watch; por isso, as aspas continuam relevantes.
watch -x -n 2 ls -lh /var/log
O comportamento geral das aspas está explicado nas regras de aspas do GNU Bash.
Exemplos de consulta do sistema
| O que consultar | Descrição |
|---|---|
| Memória | Atualiza o resultado free -h a cada segundo e destaca as partes alteradas. |
| Espaço em disco | Verifica o uso dos sistemas de arquivos raiz e /var a cada 5 segundos. |
| Processos que usam CPU | Ordena os resultados ps pelo uso de CPU e mostra as principais entradas. |
| Resumo de sockets | Verifica repetidamente o status geral dos sockets de rede com ss -s. |
| Tamanho do arquivo | Observa mudanças no tamanho de um arquivo com stat. |
| Estado do serviço | Executa systemctl status repetidamente, com --no-pager. |
Uso de memória
watch -n 1 -d free -h
Uso de disco
watch -n 5 'df -h / /var'
Confira as colunas de tamanho, usado e disponível de cada sistema de arquivos. Se / e /var estiverem no mesmo sistema de arquivos, podem mostrar os mesmos valores; isso não representa dois discos independentes.
Processos com alto uso de CPU
watch -n 1 'ps -eo pid,comm,%cpu,%mem --sort=-%cpu | head -n 15'
A primeira linha é o cabeçalho; head -n 15 deixa até 14 processos abaixo dele. Segundo o manual de ps, %cpu é uma média desde o início do processo, e não uma amostra instantânea do último segundo. Use top ou htop para acompanhar esse outro tipo de medição.
Resumo de sockets de rede
watch -n 1 ss -s
A saída resume sockets, os pontos de comunicação usados pelas conexões de rede, e contagens por protocolo. Esse comando não captura o conteúdo dos pacotes; confirme que ss, normalmente do conjunto iproute2, está instalado.
Tamanho do arquivo e horário de modificação
Substitua archive.tar pelo caminho de um arquivo existente que deseja observar. O exemplo não cria nem compacta um arquivo.
watch -n 1 'stat -c "%s bytes %y" archive.tar'
%s mostra o tamanho em bytes e %y o horário de modificação. O tamanho só muda se outro processo modificar o arquivo; consultar um arquivo estático produz a mesma saída a cada repetição.
Estado do serviço
Este exemplo exige systemd e a unidade nginx instalada. Troque o nome pela unidade real e consulte o estado uma vez antes de repetir. Uma unidade inexistente ou inativa pode retornar estado diferente de zero sem indicar falha do próprio watch.
watch -n 2 'systemctl --no-pager --full status nginx'
Comandos que podem gerar saída longa, como status do serviço, podem ser exibidos parcialmente dependendo do tamanho do terminal. Se o objetivo for o acompanhamento contínuo de logs, um comando adequado para essa função, como journalctl -f -u nginx, é mais apropriado.
Intervalos de execução exatos e comandos de longa duração
No comportamento padrão, após a execução de um único comando terminar, ele aguarda o intervalo especificado antes de iniciar a próxima execução. Usar -p ou --precise tenta alinhar o próximo horário de início com base em quando o comando anterior começou.
No exemplo abaixo, https://example.com/health é apenas um endereço ilustrativo, não um endpoint de saúde fornecido pelo domínio. Substitua-o por uma URL real de consulta que você tem autorização para monitorar e teste curl uma vez antes de repetir. Com -f, respostas HTTP de erro resultam em falha do comando.
watch -p -n 10 'date; curl -fsS https://example.com/health'
Se o tempo de execução de um comando repetido for maior que o intervalo especificado, watch não executará várias instâncias simultaneamente, mas aguardará a conclusão do comando atual. Para tarefas programadas que precisam de registro de execução e controle de falhas, prefira um timer do systemd ou um agendador de tarefas. A configuração e as garantias dependem do agendador; -p não transforma watch em um sistema de tempo real.
Controle com o teclado
| Tecla | Ação |
|---|---|
q |
Sai do watch. O comando filho em execução pode não parar imediatamente. |
Ctrl+c |
Envia um sinal de interrupção para sair tanto do watch quanto da tarefa em execução. |
| Barra de espaço | Solicita a execução do comando sem esperar pelo próximo horário programado. Se já estiver em execução, inicia a próxima execução imediatamente após a conclusão, sem atraso. |
As ações das teclas podem variar dependendo da versão do procps-ng, portanto, primeiro verifique o man watch do sistema atual.
Precauções ao usar o watch
- Prefira consultas de leitura: Repetir comandos que alteram o estado, como exclusão de arquivos, pagamentos, criação de usuários ou reinício de serviços, pode levar a resultados indesejados.
- Evite intervalos muito curtos: Executar consultas de banco de dados, solicitações de API remota ou buscas em diretórios grandes em intervalos muito curtos pode sobrecarregar o sistema ou serviços externos.
- Confira a área visível da tela:
-ge-dsão afetados pela saída exibida no terminal, então alterações na área truncada podem não ser detectadas. - Evite comandos interativos: Programas que aguardam entrada do usuário, como prompts de senha, editores ou paginadores, não são adequados para execução repetida.
- Distinga os estados de saída: O status de sucesso do
watchbásico nem sempre significa que o comando repetido foi bem-sucedido. Se você precisar responder a erros de comando, verifique opções como-ena versão atual.
Quando outras ferramentas são mais adequadas do que watch
| Objetivo | Ferramentas apropriadas |
|---|---|
| Monitorando logs que estão sendo adicionados a um arquivo | tail -f ou tail -F |
| Monitorando logs de serviços do systemd | journalctl -f -u nome-do-servico |
| Verificando o uso de recursos do processo | top ou htop |
| Tarefas repetitivas programadas | timer do systemd ou cron |
| Coleta de métricas e alertas de longo prazo | Sistema de monitoramento dedicado |
watch é adequado para uma pessoa observar mudanças de curto prazo no terminal. Se você precisar de registro, notificações e análise de longo prazo, deve escolher uma ferramenta adequada para esse propósito.
Perguntas frequentes
O que fazer se o comando watch não existir?
watch geralmente está incluído no pacote procps ou procps-ng. Pode não estar presente em ambientes de instalação mínima, então você precisará instalar o pacote usando o gerenciador de pacotes da sua distribuição atual. Verifique a documentação da distribuição para o nome do pacote e o comando de instalação.
Por que aliases ou funções não funcionam dentro de watch?
Aliases e funções podem ser definidos apenas no shell interativo atual, e podem não ser passados para o ambiente sh -c que watch chama por padrão. Para tarefas repetitivas, é mais fácil e previsível usar o executável real, um comando explícito ou um script de shell separado.
Por que as cores do comando não aparecem?
Habilite a interpretação de cores ANSI com watch -c e configure o comando repetido para gerar códigos de cores em ambientes não interativos também. Dependendo do programa, uma opção separada como --color=always pode ser necessária.
Por que comandos que incluem pipes devem ser colocados entre aspas?
Sem aspas, o shell atual pode processar o pipe primeiro, fazendo com que toda a saída do watch seja passada para outro comando. Colocar todo o pipeline entre aspas simples permite que watch o passe como uma única string de comando para o shell que irá executá-lo repetidamente.
Resumo
watch é uma ferramenta de observação simples que exibe repetidamente os resultados de um comando no intervalo padrão de 2 segundos. Você pode alterar o intervalo com -n, destacar mudanças com -d e sair quando a saída mudar com -g.
Comandos que incluem pipes e redirecionamento devem ser completamente colocados entre aspas simples, e a carga e os efeitos colaterais da execução repetida no sistema devem ser verificados. Você pode encontrar os propósitos de outros comandos por tarefa na referência de comandos do Linux por tarefa.




