Oi, Juliene!
Que bacana ver você explorando awk e montando seu próprio script, está no caminho certo.
1) Por que free -h | grep Mem | awk ... pode não funcionar:
Alguns motivos comuns:
- Localização/idioma: em muitos sistemas a linha começa com
Mem: (com dois pontos). Se você usar grep Mem sem ancorar no início, pode coincidir algo indesejado; se usar grep "^Mem" e a palavra estiver diferente (ex.: outro idioma), não bate. - Espaçamento variável: o espaçamento entre colunas muda de acordo com o terminal e o tamanho dos números; como você usou
$2, $3, $4 em awk, está ok, mas se o grep não capturar a linha certa, nada chega ao awk. - Cabeçalhos e formato: versões diferentes do
procps podem alterar levemente o cabeçalho.
Sua solução awk 'NR==2' funciona bem porque a segunda linha do free traz os dados da RAM em praticamente todas as versões, independentemente do idioma. É uma forma simples e robusta.
2) Formas mais confiáveis de pegar a linha da RAM:
Se quiser manter filtragem por conteúdo (e não por número da linha), prefira ancorar o início e aceitar variações:
# 2.1) Forte quanto a idioma (desde que comece com "Mem")
free -h | awk '/^Mem/ {print "Total:", $2, "| Usada:", $3, "| Livre:", $4}'
# 2.2) Forçar idioma "C" (útil se seu sistema estiver pt_BR e você quer previsibilidade)
LC_ALL=C free -h | awk '/^Mem/ {print "Total:", $2, "| Used:", $3, "| Free:", $4}'
# 2.3) Igual à sua (por linha), muito prática:
free -h | awk 'NR==2 {print "Total:", $2, "| Usada:", $3, "| Livre:", $4}'
Observação importante sobre “Usada”:
O free mostra as colunas: total, used, free, shared, buff/cache, available. A coluna used inclui buffers e cache. Se você quiser a memória “realmente” usada por apps, uma métrica comum é:
used_real = total - free - buff/cache
Em awk:
free -m | awk '/^Mem/ {used=$2-$4-$6; printf "Total: %sMi | Usada(real): %sMi | Livre: %sMi | Buff/Cache: %sMi\n", $2, used, $4, $6}'
Pontos fortes do seu script:
- Estrutura em funções (ótimo para ler e manter).
- Logs separados por categoria.
- Testes de existência dos arquivos de log.
- Checagem de conectividade (ping e
curl).
Continue firme nos estudos.
Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!