Em certas situações, torna-se necessário executar um comando ou programa de forma repetida para acompanhar diversos aspectos do seu sistema, tais como processos em andamento, o consumo de espaço em disco ou os logins de usuários. O comando `watch` no Linux surge como uma ferramenta valiosa para automatizar essas tarefas, eliminando a necessidade de execução manual repetitiva.
Através deste comando, é possível monitorar em tempo real as atividades do sistema, como os logins de usuários, o estado da rede, o uso de memória e CPU, o espaço em disco disponível, entre outros. Vamos agora explorar o uso do comando `watch` no ambiente Linux.
O que é o comando Watch?
O comando `watch` do Linux tem como função executar um comando ou programa específico de maneira repetida, em intervalos regulares, apresentando o resultado no terminal. Isso permite observar as mudanças na saída do comando em tempo real. A cada intervalo, a saída é atualizada, substituindo a exibição anterior. Por padrão, o comando repete-se a cada dois segundos e prossegue até que seja interrompido manualmente através do atalho Ctrl + C.
Sintaxe do comando `watch`
A estrutura básica do comando `watch` é a seguinte:
watch opções <comando>
Existem diversas opções de linha de comando que podem ser utilizadas com o comando `watch`. Ao executar o comando sem nenhuma opção, ele repetirá o comando especificado a cada dois segundos. Por exemplo, o seguinte comando exibirá a saída do comando `ls`:
watch ls -l ~/
A saída demonstrará as alterações na listagem de diretórios caso um arquivo seja criado, removido ou tenha seu tamanho alterado, atualizando a exibição a cada dois segundos.
Executando um comando a cada X segundos com `watch`
É possível personalizar o intervalo de atualização do comando `watch`, permitindo que ele aguarde um número específico de segundos antes de repetir o comando. Para modificar o intervalo de atualização, utiliza-se a opção `-n`, seguida do intervalo de tempo desejado em segundos.
watch -n
Por exemplo, para executar um comando a cada 5 segundos, utilize:
watch -n 5 <comando>
Destacando as alterações entre atualizações
O comando `watch` substitui a saída a cada atualização. Com a opção `-d`, é possível também destacar as diferenças entre a saída anterior e a mais recente.
watch -d
Ocultando o cabeçalho na saída do comando `watch`
Por padrão, o comando `watch` exibe um cabeçalho na parte superior de cada saída, incluindo o intervalo de atualização, o nome do comando e a data e hora atuais do sistema. Para remover o cabeçalho da saída, utiliza-se a opção `-t`:
watch -t <comando>
Emitindo bipes em caso de erro
Quando um processo no Linux finaliza sua execução, ele retorna um código de saída. Por convenção, o valor 0 indica sucesso, enquanto valores diferentes de zero sinalizam um erro. A opção `-b` do comando `watch` emite um sinal sonoro caso o comando retorne uma saída diferente de zero.
Suponha que você queira monitorar o serviço `sshd.service` e ser notificado caso ele seja interrompido; você usaria:
watch -b sudo systemctl status sshd.service
Este comando emitirá bipes caso o serviço seja parado. O som irá cessar quando o serviço for retomado. Para testar, abra outra janela de terminal e interrompa o serviço. Isso resultará em bipes contínuos até que você reinicie o serviço. Para utilizar este recurso, é necessário ter o pacote `beep` instalado em seu sistema.
Encerrando o comando `watch` ao detectar mudanças na saída
Você pode instruir o comando `watch` a parar a execução e encerrar caso a saída do comando sofra alterações. Isso é alcançado com a opção `-g`. Essa opção é particularmente útil em situações nas quais se aguarda mudanças específicas na saída.
Assim que a saída for alterada, o comando `watch` será finalizado. É possível combinar essa funcionalidade com o comando `echo` para exibir uma mensagem na tela.
Por exemplo, imagine um cenário no qual você está aguardando a chegada de um arquivo em seu diretório. O comando a seguir monitorará o diretório especificado. Assim que o arquivo chegar, o comando `watch` parará de funcionar e a mensagem “arquivo chegou” será exibida no terminal.
watch -g "ls -l | grep nome_do_arquivo" && echo "arquivo chegou"
Outro exemplo prático é uma notificação quando um usuário específico realiza login no sistema:
watch -g "who | grep nome_de_usuario" && echo "nome_de_usuario fez login"
Esse comando monitorará a saída do comando `who`, que lista os usuários logados. Assim que o usuário em questão fizer login, o comando `watch` será encerrado e uma mensagem será exibida no terminal.
De forma similar, é possível instruir o comando `watch` a interromper um serviço ao detectar mudanças em um arquivo. Lembre-se que, ao utilizar uma cadeia de comandos com pipes, é necessário colocar o comando completo entre aspas.
Acompanhando as atividades no seu sistema Linux
Caso você execute o mesmo processo repetidamente, considere utilizar o comando `watch` para automatizar essa tarefa. Isso evita que você precise digitar os comandos com frequência para verificar as mudanças.
Você também pode utilizar o comando `watch` em conjunto com outros comandos do Linux para monitorar recursos e atividades do sistema e rastrear alterações em arquivos ou diretórios.