Bem-vindo à aula 52 do nosso curso de Shell Script! Hoje vamos mergulhar no monitoramento de sistemas Linux, uma habilidade crucial para qualquer administrador ou usuário avançado. Saber como verificar o desempenho do sistema, a utilização de memória, o espaço em disco e o tempo de atividade não só ajuda a diagnosticar problemas, mas também a otimizar recursos e planejar atualizações.

Vamos explorar cinco comandos fundamentais: top, htop, free, df, du e uptime. Cada um fornece uma visão específica do sistema, e juntos eles formam um kit de ferramentas essencial para qualquer profissional de TI. Ao longo da aula, você verá exemplos práticos, opções úteis e dicas para interpretar as saídas corretamente.

top e htop

O comando top é um dos utilitários mais antigos e poderosos para monitorar processos em tempo real. Ele exibe uma lista dinâmica de processos, ordenada por uso de CPU, além de informações resumidas sobre o sistema, como carga média, número de tarefas e uso de memória. Para iniciá-lo, basta digitar top no terminal. A interface é interativa: você pode pressionar teclas para classificar por memória (M), por PID (N), matar processos (k), entre outras opções. O top é ideal para uma visão rápida e leve, pois está disponível em praticamente todas as distribuições Linux.

O htop é uma alternativa mais amigável e colorida. Ele oferece uma interface visual com barras de progresso, uso de cores para diferenciar tipos de processos e suporte a mouse. Além disso, permite rolagem vertical e horizontal, facilitando a navegação em sistemas com muitos processos. Para instalar, use o gerenciador de pacotes da sua distro (ex.: sudo apt install htop no Ubuntu). Enquanto top é mais leve e scriptável, htop é excelente para uso interativo. Em scripts, é comum usar top em modo batch (top -b -n 1) para gerar uma única saída, enquanto htop é menos adequado para automação.

Exemplo de uso do top em modo batch para capturar a saída em um arquivo:

top -b -n 1 > /tmp/top_output.txt
cat /tmp/top_output.txt

No htop, você pode pressionar F6 para escolher o critério de ordenação, F9 para matar um processo, e F10 para sair. A barra superior mostra medidores de CPU, memória e swap, além da carga média.

free

O comando free é essencial para verificar o uso de memória RAM e swap. Ele exibe a quantidade total, usada e livre de memória física, além da memória de troca (swap). A saída padrão é em kibibytes, mas você pode usar -h para formato legível por humanos, -m para megabytes ou -g para gigabytes. O comando é simples e direto, ideal para scripts de monitoramento.

Entender a diferença entre memória usada e memória disponível é crucial. O Linux usa memória para cache de arquivos, o que pode parecer "usada", mas na verdade é memória disponível para aplicativos quando necessário. A coluna available (disponível) já considera isso. Exemplo de uso:

free -h

Saída típica:

              total        used        free      shared  buff/cache   available
Mem:           7.6Gi       2.1Gi       1.2Gi        89Mi       4.3Gi       5.0Gi
Swap:          2.0Gi       0.0B       2.0Gi

Nesse exemplo, o sistema tem 7,6 GB de RAM, com 5,0 GB disponíveis para novos aplicativos. O cache de arquivos (buff/cache) usa 4,3 GB, mas pode ser liberado se necessário.

df e du

O comando df (disk free) mostra o espaço em disco disponível e usado em cada sistema de arquivos montado. É útil para verificar se um disco está cheio. Use df -h para saída legível. Exemplo:

df -h

O comando du (disk usage) é usado para estimar o espaço ocupado por arquivos e diretórios. Por exemplo, du -sh /var/log mostra o tamanho total do diretório /var/log de forma resumida. Combinado com sort, você pode identificar quais diretórios consomem mais espaço. Exemplo:

du -sh /home/* | sort -h

Isso lista o tamanho de cada diretório em /home, ordenado do menor para o maior. Para encontrar arquivos grandes, você pode usar du -a ou combinar com find.

uptime

O comando uptime mostra há quanto tempo o sistema está em execução, o número de usuários logados e a carga média do sistema em 1, 5 e 15 minutos. A carga média é um indicador importante: valores altos podem significar sobrecarga de CPU ou espera de I/O. Em sistemas com múltiplos núcleos, uma carga de 1,0 pode ser aceitável, mas em um sistema de um núcleo, isso indica utilização total. Exemplo:

uptime

Saída:

 10:30:12 up 3 days,  4:05,  2 users,  load average: 0.08, 0.03, 0.01

Nesse caso, o sistema está ativo há 3 dias, com carga média baixa, indicando ocioso. Para monitorar a carga ao longo do tempo, você pode usar watch uptime ou integrar em scripts.

Boas práticas e observações finais

Ao monitorar o sistema, é importante combinar várias métricas para ter uma visão completa. Por exemplo, alta carga média pode ser causada por processos em estado D (uninterruptible sleep), que podem indicar problemas de I/O. Use top para identificar esses processos. Além disso, crie scripts que coletem essas informações periodicamente e as registrem em logs para análise posterior. Ferramentas como sar ou sysstat podem ser úteis, mas os comandos básicos são o ponto de partida.

Lembre-se de que o monitoramento proativo ajuda a evitar indisponibilidades. Estabeleça alertas para quando o uso de disco ou memória atingir limites críticos. Você pode usar cron para executar scripts de verificação e enviar notificações por e-mail ou mensageiro.

Referências

Exercícios

  1. Execute o comando top em modo batch e salve a saída em um arquivo. Em seguida, exiba as primeiras 10 linhas do arquivo. Qual é o processo que mais consome CPU?
  2. ✓ Resposta: Use top -b -n 1 > /tmp/top.txt e depois head -10 /tmp/top.txt. O primeiro processo na lista (geralmente o primeiro após o cabeçalho) é o que mais consome CPU. A resposta exata depende do sistema, mas você deve identificar o PID e o nome.
  3. Use o comando free -h para verificar a memória. Explique o que significam as colunas 'used', 'free' e 'available' e por que 'available' é mais relevante para saber se há memória suficiente para novos programas.
  4. ✓ Resposta: 'used' é a memória realmente utilizada por processos, 'free' é a memória completamente livre, e 'available' é a memória que pode ser usada por novos aplicativos, incluindo a que está em cache e pode ser liberada. 'available' é mais precisa porque o Linux usa memória livre para cache, mas pode liberá-la quando necessário.
  5. Encontre o diretório que mais consome espaço dentro do seu diretório home usando du. Liste os 3 maiores diretórios em ordem decrescente.
  6. ✓ Resposta: Use du -h --max-depth=1 ~ | sort -hr | head -3 para listar os maiores diretórios. A resposta varia, mas o comando mostrará os três primeiros.
  7. Usando o uptime, verifique a carga média do sistema. Se a carga média em 1 minuto for maior que o número de núcleos da CPU, o que isso indica? Como você pode confirmar se há processos em estado D (uninterruptible sleep)?
  8. ✓ Resposta: Carga média maior que o número de núcleos indica sobrecarga. Para verificar processos em estado D, use top e observe a coluna 'S' (estado) ou use ps aux | awk '$8 ~ /D/' para listar processos com estado D.
  9. Escreva um script em shell que verifique se o uso de disco da partição raiz (/) está acima de 80% e imprima uma mensagem de alerta. Use df e awk para extrair a porcentagem.
  10. ✓ Resposta: Script:
    #!/bin/bash
    uso=$(df / | awk 'NR==2 {print $5}' | sed 's/%//')
    if [ $uso -gt 80 ]; then
        echo "Alerta: uso de disco em / está em $uso%"
    fi