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
sudopor 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:
sudousasecure_path, umPATHdiferente. Use o caminho completo ousudo 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, usesudoousudo 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 viasudo
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.ymlfalha, verifique o caminho absolutocat /etc/app/config.yml - "not found" no shebang: um
^Mfinal significa terminações 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 simbólico 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 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 -imostra 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 +L1e 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.confegetent 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_REUSEADDRno 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
--memorye 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:
^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 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
lddmostranot found, reinstale a biblioteca - Bug reproduzível: execute com
ulimit -c unlimited, depoisgdb <app> <core>e obtenhabt(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
sudosem ler a mensagem - Enterrar problemas de permissão com
chmod 777 - Verificar apenas
dfe nuncadf -i(inodes) - Julgar
Killedapenas pelo log do app (nunca verificando o log do kernel)