Dicionario de Mensagens de Erro do Linux: Erros Comuns, Causas e Solucoes
Como Usar Este Dicionario
Cada titulo e a string literal do erro. Pressione Ctrl+F, busque o texto mostrado no seu terminal, depois leia a "Causa", "Diagnostico" e "Solucao" da secao correspondente de cima para baixo para a recuperacao mais rapida.
Regras universais
- Leia a primeira linha do erro, nao apenas a ultima (a causa raiz geralmente e impressa primeiro)
- Nao adicione
sudopor palpite. Diagnostique a causa primeiro - Sempre isole tres coisas em ordem: qual comando / qual arquivo / qual permissao
Premissas (ambiente alvo)
- SO: distribuicoes comuns (Ubuntu / Debian / familia RHEL)
- Shell: bash (zsh se comporta da mesma forma na maioria dos casos)
- Operando como usuario regular
O que significa "command not found"?
O shell nao consegue localizar um executavel com esse nome no PATH. A causa e quase sempre um erro de digitacao, um pacote faltando ou um PATH mal configurado.
bash: dokcer: command not found
Diagnostico:
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?
Solucao:
- Erro de digitacao: o exemplo acima e
dokcer; o nome correto edocker - Nao instalado:
sudo apt install <package>(familia RHEL:dnf install) - PATH faltando: o binario existe mas nao e encontrado. Adicione
export PATH="$PATH:/usr/local/bin"ao~/.bashrc - So falha com sudo:
sudousasecure_path, umPATHdiferente. Use o caminho completo ousudo env "PATH=$PATH" cmd
Se "not found" persistir logo apos a instalacao, 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 usuario em execucao nao tem a permissao necessaria (leitura/escrita/execucao) no alvo. A causa e permissoes de arquivo, propriedade, um bit de execucao de diretorio faltando ou SELinux/AppArmor.
bash: ./deploy.sh: Permission denied -bash: /var/log/app.log: Permission denied
Diagnostico:
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
Solucao:
- Script nao executa:
chmod +x deploy.sh - Nao consegue escrever no arquivo: se voce e o dono,
chmod u+w file; se e de outro dono, usesudoousudo chown $USER file - Nao consegue entrar em um diretorio: um diretorio precisa do bit de execucao
x.chmod +x dir - Areas do sistema (
/etc,/var/log): faca alteracoes de configuracao viasudo
Aplicar chmod 777 em tudo para "simplesmente funcionar" causa incidentes. Mantenha o privilegio minimo (arquivos 644/755, diretorios 755).
Veja Solucao para Permission Denied para detalhes.
O real significado de "No such file or directory"
O caminho nao existe, ou um diretorio intermediario esta faltando. Tambem aparece com links simbolicos 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
Diagnostico:
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
Solucao:
- Caminho relativo mal lido: se
cat ./config.ymlfalha, verifique o caminho absolutocat /etc/app/config.yml - "not found" no shebang: um
^Mfinal significa terminacoes de linha Windows (CRLF). Remova-as:sed -i 's/\r$//' run.sh - Caminho errado no shebang:
#!/bin/bashvs/usr/bin/bash. Confirme o caminho real comwhich bash - Link simbolico quebrado: se
ls -lmostra o alvo em vermelho, o destino sumiu. Recrie o link
Como investigar "No space left on device"
O sistema de arquivos alvo nao tem espaco livre. A armadilha: a mesma mensagem aparece na exaustao de inodes (grande numero de arquivos pequenos), nao apenas ao ficar sem blocos de dados.
cp: error writing 'backup.tar': No space left on device
Diagnostico:
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?
Solucao:
- Exaustao de blocos: apague logs enormes e arquivos antigos. Compacte logs com
journalctl --vacuum-size=200M - Exaustao de inodes: se
df -imostra 100%, voce nao pode escrever mesmo com espaco livre. Remova arquivos pequenos desnecessarios (caches, sessoes) - Apagado mas espaco nao recuperado: um processo ainda mantem o arquivo aberto. Encontre-o com
lsof +L1e reinicie o processo
Mesmo logo apos rm, o espaco nao e liberado enquanto um processo ainda mantiver o arquivo aberto. df nao vai diminuir ate o servico 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 (servico inativo ou porta errada). Connection timed out significa nenhuma resposta voltou (rota, firewall ou host inativo). Essa distincao e o ponto de partida do diagnostico.
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
Diagnostico:
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?
Solucao:
- refused: confirme que o servico esta executando,
systemctl status sshd. Verifique tambem se o numero da porta esta errado - timed out: verifique regras de firewall/security group, a rota (
traceroute) e se o host esta vivo - resolucao de nomes falha:
Could not resolve hoste um problema de DNS. Verifique/etc/resolv.confegetent hosts <name>
Veja Solucao de Problemas de Conexao SSH e Basico de Comandos de Rede para detalhes.
Corrigindo "Address already in use"
A porta que seu processo quer ja esta ocupada por outro processo. Causas comuns: um processo remanescente de uma execucao anterior, inicio duplo ou um socket TIME_WAIT persistente.
Error: listen EADDRINUSE: address already in use :::3000 bind: Address already in use
Diagnostico:
ss -tlnp | grep :3000 # qual PID segura a porta lsof -i :3000 # o mesmo, com nome do processo
Solucao:
- Parar o processo remanescente:
kill <PID>; se ele ignorar,kill -9 <PID> - Inicio duplo: verifique se o systemd ou um gerenciador de processos (pm2, etc.) o iniciou mais de uma vez
- Nao consegue religar devido a TIME_WAIT: habilite
SO_REUSEADDRno app, ou espere algumas dezenas de segundos
Quando voce ve "Killed" / Out of memory
A maioria das mensagens Killed vem do OOM killer encerrando um processo sob pressao de memoria. Mesmo quando o log do app nao tem rastro, o log do kernel registra.
$ ./train.py Killed
Diagnostico:
dmesg -T | grep -i -E 'oom|killed process' # evidencia de OOM journalctl -k | grep -i oom # ambiente systemd free -h # memoria / swap atual
Solucao:
- Sem memoria fisica: reduza o batch size, pare processos desnecessarios, adicione swap
- Um processo inchou: encontre o consumidor de memoria com
ps aux --sort=-%mem | head - Limite de container: verifique se voce atingiu o limite
--memorye revise-o
Um Killed sem OOM pode ser um kill manual ou um killer de timeout. Se dmesg nao tem registro de OOM, suspeite desses.
bad interpreter / Exec format error
O kernel nao consegue iniciar o executavel. A causa e um shebang errado, contaminacao CRLF ou incompatibilidade de arquitetura (ex: executar um binario ARM em x86).
./run.sh: /bin/sh^M: bad interpreter: No such file or directory ./app: cannot execute binary file: Exec format error
Diagnostico:
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
Solucao:
^Mfinal: remova CRLF,sed -i 's/\r$//' run.sh- Caminho errado no shebang: confirme o caminho real com
whiche corrija - Incompatibilidade de arquitetura: recompile para o host; para execucao cruzada considere
qemu-user
Primeiros passos em "segmentation fault (core dumped)"
O processo acessou memoria invalida e o SO o encerrou. Geralmente um bug da aplicacao, mas uma biblioteca compartilhada corrompida ou incompatibilidade de versao tambem pode causar.
Segmentation fault (core dumped)
Diagnostico:
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?
Solucao:
- Incompatibilidade de biblioteca: se
lddmostranot found, reinstale a biblioteca - Bug reproduzivel: execute com
ulimit -c unlimited, depoisgdb <app> <core>e obtenhabt(backtrace) - Logo apos uma atualizacao: verifique a consistencia de dependencias (
apt install --reinstall <pkg>)
Veja Basico de Gerenciamento de Pacotes para detalhes.
Tabela de Referencia de Erros
| Mensagem | Causa principal | Primeiro comando |
|---|---|---|
| command not found | nao instalado / PATH | command -v cmd |
| Permission denied | permissao / dono | ls -l target |
| No such file or directory | caminho errado / CRLF | ls -la / file f |
| No space left on device | espaco / exaustao inodes | df -h / df -i |
| Connection refused | servico 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 nao fazer
- Adicionar
sudosem ler a mensagem - Enterrar problemas de permissao com
chmod 777 - Verificar apenas
dfe nuncadf -i(inodes) - Julgar
Killedapenas pelo log do app (nunca verificando o log do kernel)