Troubleshooting Avançado no Linux com strace e lsof

Administrar sistemas Linux exige não só conhecimento básico dos comandos, mas também a habilidade de diagnosticar problemas complexos em processos e arquivos abertos. Para isso, duas ferramentas poderosas são o strace e o lsof. Neste artigo, vamos explorar como usá-las para investigar problemas avançados, como processos travados, arquivos em uso indevido, problemas de rede, e muito mais.


O que é strace?

strace é uma ferramenta que monitora as chamadas de sistema (system calls) feitas por um processo em execução. Cada interação do processo com o kernel — abrir arquivos, ler, escrever, criar processos, acessar rede, etc. — pode ser observada em tempo real.

Isso torna o strace indispensável para entender exatamente o que um programa está fazendo, onde ele pode estar travando ou falhando, e quais recursos está utilizando.


Como usar o strace

1. Monitorar um comando desde o início

strace comando [argumentos]

Exemplo:

strace ls -l /tmp

2. Anexar a um processo em execução

strace -p PID

3. Filtrar chamadas específicas

Para ver apenas chamadas relacionadas a arquivos:

strace -e trace=file comando

Ou apenas chamadas de rede:

strace -e trace=network comando

4. Salvar saída para análise posterior

strace -o arquivo_saida.log comando

Exemplos práticos com strace

Diagnóstico de travamento

Se um processo está travado, rode:

strace -p PID

Você verá a última chamada feita, podendo identificar se está aguardando um arquivo, bloqueado em rede, etc.

Problemas com permissões

Se um programa falha ao acessar arquivos, o strace mostrará erros do tipo EACCES (Permission denied) e o arquivo afetado.


O que é lsof?

lsof (List Open Files) lista todos os arquivos abertos por processos. Como no Linux tudo é arquivo, o lsof também mostra conexões de rede, pipes, dispositivos, bibliotecas carregadas e muito mais.

É excelente para:

  • Ver quais arquivos um processo está usando.
  • Descobrir quais processos estão usando um arquivo/diretório específico.
  • Diagnosticar portas em uso ou bloqueadas.
  • Encontrar arquivos abertos que impedem desmontar um sistema.

Como usar o lsof

1. Listar todos os arquivos abertos (muito extenso)

lsof

2. Arquivos abertos por um processo específico

lsof -p PID

3. Processos que abrem um arquivo/diretório

bashCopiarEditarlsof /caminho/para/arquivo

4. Listar processos usando uma porta TCP

lsof -i TCP:80

Ou todos os processos com conexão TCP/UDP:

lsof -i

Exemplos práticos com lsof

Encontrar quem está usando um arquivo

Quando um disco não desmonta porque “arquivo está em uso”:

bashCopiarEditarlsof /mnt/backup

Verificar se uma porta está ocupada antes de iniciar um serviço

lsof -i :3306

Se aparecer um processo, significa que a porta está em uso.


Usando strace e lsof juntos no troubleshooting

Imagine um serviço que não inicia porque “arquivo ocupado” ou “permissão negada”:

  1. Use o lsof para verificar se algum processo está segurando o arquivo:
lsof /var/log/app.log
  1. Se não encontrar processos, use o strace para monitorar o serviço enquanto ele tenta abrir o arquivo, para capturar o erro:
strace -e trace=file -o trace.log ./start_service.sh

Depois, examine trace.log para detalhes.


Dicas avançadas

  • Use strace com -f para seguir processos filhos.
  • Combine lsof com grep para buscas específicas, ex: lsof | grep nome_arquivo.
  • Em sistemas com SELinux ou AppArmor, verifique mensagens relacionadas nas chamadas strace.
  • Em scripts, redirecione saída do strace para logs rotacionados para análise posterior.

Conclusão

strace e lsof são ferramentas essenciais para qualquer administrador Linux que precise ir além do básico e entender exatamente o que está acontecendo com processos, arquivos e conexões no sistema. Saber usá-las pode acelerar muito o diagnóstico e solução de problemas complexos.


Comentários

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *