Dicionário de Mensagens de Erro do Linux: Erros Comuns, Causas e Soluções

Dicionário de Mensagens de Erro do Linux: Erros Comuns, Causas e Soluções

Como Usar Este Dicionário

Cada título é a string literal do erro. Pressione Ctrl+F, busque o texto mostrado no seu terminal, depois leia a "Causa", "Diagnóstico" e "Solução" da seção correspondente de cima para baixo para a recuperação mais rápida.

Regras universais

  • Leia a primeira linha do erro, não apenas a última (a causa raiz geralmente é impressa primeiro)
  • Não adicione sudo por palpite. Diagnostique a causa primeiro
  • Sempre isole três coisas em ordem: qual comando / qual arquivo / qual permissão

Premissas (ambiente alvo)

  • SO: distribuições comuns (Ubuntu / Debian / família RHEL)
  • Shell: bash (zsh se comporta da mesma forma na maioria dos casos)
  • Operando como usuário regular

O que significa "command not found"?

O shell não consegue localizar um executável com esse nome no PATH. A causa é quase sempre um erro de digitação, um pacote faltando ou um PATH mal configurado.

bash: dokcer: command not found

Diagnóstico:

command -v docker      # imprime o caminho real se esta no PATH
which docker           # mesma ideia (comando externo)
echo "$PATH"           # o diretorio esperado esta incluido?
type docker            # alias / funcao / binario real?

Solução:

  • Erro de digitação: o exemplo acima é dokcer; o nome correto é docker
  • Não instalado: sudo apt install <package> (família RHEL: dnf install)
  • PATH faltando: o binário existe mas não é encontrado. Adicione export PATH="$PATH:/usr/local/bin" ao ~/.bashrc
  • Só falha com sudo: sudo usa secure_path, um PATH diferente. Use o caminho completo ou sudo env "PATH=$PATH" cmd

Se "not found" persistir logo após a instalação, o shell armazenou o local do comando em cache. Limpe com hash -r.

Veja Corrigindo Erros "command not found" para detalhes.

Por que "Permission denied" aparece?

O usuário em execução não tem a permissão necessária (leitura/escrita/execução) no alvo. A causa é permissões de arquivo, propriedade, um bit de execução de diretório faltando ou SELinux/AppArmor.

bash: ./deploy.sh: Permission denied
-bash: /var/log/app.log: Permission denied

Diagnóstico:

ls -l deploy.sh        # o bit de execucao esta definido? quem e o dono?
ls -ld /var/log        # permissoes do diretorio pai
whoami                 # seu nome de usuario
id                     # seus grupos

Solução:

  • Script não executa: chmod +x deploy.sh
  • Não consegue escrever no arquivo: se você é o dono, chmod u+w file; se é de outro dono, use sudo ou sudo chown $USER file
  • Não consegue entrar em um diretório: um diretório precisa do bit de execução x. chmod +x dir
  • Áreas do sistema (/etc, /var/log): faça alterações de configuração via sudo

Aplicar chmod 777 em tudo para "simplesmente funcionar" causa incidentes. Mantenha o privilégio mínimo (arquivos 644/755, diretórios 755).

Veja Solução para Permission Denied para detalhes.

O real significado de "No such file or directory"

O caminho não existe, ou um diretório intermediário está faltando. Também aparece com links simbólicos quebrados, caminhos relativos mal lidos e uma linha de interpretador errada (shebang).

cat: config.yml: No such file or directory
bash: ./run.sh: /bin/bash^M: bad interpreter: No such file or directory

Diagnóstico:

pwd                    # onde estou agora?
ls -la                 # o arquivo realmente existe (incluindo ocultos)?
file run.sh            # verificar terminacoes de linha CRLF
readlink -f link       # alvo final de um link simbolico

Solução:

  • Caminho relativo mal lido: se cat ./config.yml falha, verifique o caminho absoluto cat /etc/app/config.yml
  • "not found" no shebang: um ^M final significa terminações de linha Windows (CRLF). Remova-as: sed -i 's/\r$//' run.sh
  • Caminho errado no shebang: #!/bin/bash vs /usr/bin/bash. Confirme o caminho real com which bash
  • Link simbólico quebrado: se ls -l mostra o alvo em vermelho, o destino sumiu. Recrie o link

Como investigar "No space left on device"

O sistema de arquivos alvo não tem espaço livre. A armadilha: a mesma mensagem aparece na exaustão de inodes (grande número de arquivos pequenos), não apenas ao ficar sem blocos de dados.

cp: error writing 'backup.tar': No space left on device

Diagnóstico:

df -h                  # uso de espaco (Use%)
df -i                  # uso de inodes (IUse%) -- facil de ignorar
du -sh /var/* 2>/dev/null | sort -h   # o que e grande?

Solução:

  • Exaustão de blocos: apague logs enormes e arquivos antigos. Compacte logs com journalctl --vacuum-size=200M
  • Exaustão de inodes: se df -i mostra 100%, você não pode escrever mesmo com espaço livre. Remova arquivos pequenos desnecessários (caches, sessões)
  • Apagado mas espaço não recuperado: um processo ainda mantém o arquivo aberto. Encontre-o com lsof +L1 e reinicie o processo

Mesmo logo após rm, o espaço não é liberado enquanto um processo ainda mantiver o arquivo aberto. df não vai diminuir até o serviço reiniciar.

Veja Investigando "No Space Left on Device" para detalhes.

"Connection refused" vs "timed out"

Connection refused significa que o pacote chegou ao host mas a porta rejeitou (serviço inativo ou porta errada). Connection timed out significa nenhuma resposta voltou (rota, firewall ou host inativo). Essa distinção é o ponto de partida do diagnóstico.

ssh: connect to host 10.0.0.5 port 22: Connection refused
curl: (28) Failed to connect to api.example.com port 443: Connection timed out

Diagnóstico:

ping -c3 10.0.0.5                    # o host e alcancavel?
nc -vz 10.0.0.5 22                   # a porta esta aberta?
ss -tlnp | grep :22                  # o servico esta LISTENING no servidor?

Solução:

  • refused: confirme que o serviço está executando, systemctl status sshd. Verifique também se o número da porta está errado
  • timed out: verifique regras de firewall/security group, a rota (traceroute) e se o host está vivo
  • resolução de nomes falha: Could not resolve host é um problema de DNS. Verifique /etc/resolv.conf e getent hosts <name>

Veja Solução de Problemas de Conexão SSH e Básico de Comandos de Rede para detalhes.

Corrigindo "Address already in use"

A porta que seu processo quer já está ocupada por outro processo. Causas comuns: um processo remanescente de uma execução anterior, início duplo ou um socket TIME_WAIT persistente.

Error: listen EADDRINUSE: address already in use :::3000
bind: Address already in use

Diagnóstico:

ss -tlnp | grep :3000      # qual PID segura a porta
lsof -i :3000              # o mesmo, com nome do processo

Solução:

  • Parar o processo remanescente: kill <PID>; se ele ignorar, kill -9 <PID>
  • Início duplo: verifique se o systemd ou um gerenciador de processos (pm2, etc.) o iniciou mais de uma vez
  • Não consegue religar devido a TIME_WAIT: habilite SO_REUSEADDR no app, ou espere algumas dezenas de segundos

Quando você vê "Killed" / Out of memory

A maioria das mensagens Killed vem do OOM killer encerrando um processo sob pressão de memória. Mesmo quando o log do app não tem rastro, o log do kernel registra.

$ ./train.py
Killed

Diagnóstico:

dmesg -T | grep -i -E 'oom|killed process'   # evidencia de OOM
journalctl -k | grep -i oom                  # ambiente systemd
free -h                                       # memoria / swap atual

Solução:

  • Sem memória física: reduza o batch size, pare processos desnecessários, adicione swap
  • Um processo inchou: encontre o consumidor de memória com ps aux --sort=-%mem | head
  • Limite de container: verifique se você atingiu o limite --memory e revise-o

Um Killed sem OOM pode ser um kill manual ou um killer de timeout. Se dmesg não tem registro de OOM, suspeite desses.

bad interpreter / Exec format error

O kernel não consegue iniciar o executável. A causa é um shebang errado, contaminação CRLF ou incompatibilidade de arquitetura (ex: executar um binário ARM em x86).

./run.sh: /bin/sh^M: bad interpreter: No such file or directory
./app: cannot execute binary file: Exec format error

Diagnóstico:

head -1 run.sh         # examinar a linha do shebang
file app               # arquitetura do binario (x86-64 / ARM aarch64)
uname -m               # arquitetura do host em execucao

Solução:

  • ^M final: remova CRLF, sed -i 's/\r$//' run.sh
  • Caminho errado no shebang: confirme o caminho real com which e corrija
  • Incompatibilidade de arquitetura: recompile para o host; para execução cruzada considere qemu-user

Primeiros passos em "segmentation fault (core dumped)"

O processo acessou memória inválida e o SO o encerrou. Geralmente um bug da aplicação, mas uma biblioteca compartilhada corrompida ou incompatibilidade de versão também pode causar.

Segmentation fault (core dumped)

Diagnóstico:

dmesg -T | tail                       # o endereco do segfault
ldd /path/to/app                      # resolucao de biblioteca compartilhada (alguma "not found"?)
ulimit -c                             # geracao de core dump esta permitida?

Solução:

  • Incompatibilidade de biblioteca: se ldd mostra not found, reinstale a biblioteca
  • Bug reproduzível: execute com ulimit -c unlimited, depois gdb <app> <core> e obtenha bt (backtrace)
  • Logo após uma atualização: verifique a consistência de dependências (apt install --reinstall <pkg>)

Veja Básico de Gerenciamento de Pacotes para detalhes.

Tabela de Referência de Erros

Mensagem Causa principal Primeiro comando
command not found não instalado / PATH command -v cmd
Permission denied permissão / dono ls -l target
No such file or directory caminho errado / CRLF ls -la / file f
No space left on device espaço / exaustão inodes df -h / df -i
Connection refused serviço inativo ss -tlnp
Connection timed out rota / firewall nc -vz host port
Address already in use porta em uso lsof -i :PORT
Killed OOM dmesg -T | grep -i oom
Exec format error incompatibilidade de arq file app
Segmentation fault app / biblioteca ldd app

O que não fazer

  • Adicionar sudo sem ler a mensagem
  • Enterrar problemas de permissão com chmod 777
  • Verificar apenas df e nunca df -i (inodes)
  • Julgar Killed apenas pelo log do app (nunca verificando o log do kernel)

Próximas Leituras