Os códigos de erro no Linux, chamados exit codes, são números (0–255) que um programa devolve ao sistema ao terminar. 0 significa sucesso. Valores como 1, 126 e 127 indicam falhas comuns (erro geral, permissão/execução, comando não encontrado). Você lê o último código com echo $?. Se você está com outro problema diferente dos exit codes, veja o guia sobre o kernel panic.
O que são exit codes e por que eles importam?
Todo comando que você executa no terminal termina com um status de saída. Esse número é a forma padrão (e scriptável) de dizer “deu certo” ou “deu errado”, inclusive em automações, CI/CD, cron e scripts Bash.
- Como ver o último exit code (do comando imediatamente anterior):
comando_qualquer
echo $?- Regra básica
0= sucesso1–255= algum tipo de falha ou condição especial
- Por que o intervalo vai até 255?
Em sistemas POSIX, o status de saída costuma ser um valor de 8 bits. Se um programa tentar “sair” com um número maior, o shell geralmente “encaixa” isso no intervalo (módulo 256). Na prática, não use códigos acima de 255.
Tabela de referência rápida: códigos de erro comuns
| Código | Nome comum | O que geralmente significa | Exemplo típico | Como resolver rápido |
|---|---|---|---|---|
| 0 | Success | Comando executou sem erros | grep achou e retornou OK (ou programa terminou bem) | Nada a fazer |
| 1 | General error | Falha genérica (depende do programa) | grep não encontrou; app retornou “erro” | Leia a mensagem, valide argumentos e entradas |
| 126 | Not executable | Encontrou o arquivo, mas não conseguiu executar | Permissão negada, binário inválido | chmod +x, verifique arquitetura, shebang |
| 127 | Command not found | Comando não existe ou não está no PATH | foo: command not found | Instale o pacote, corrija o nome, ajuste PATH |
| 130 | Script terminated by Ctrl+C | Interrupção pelo usuário (SIGINT) | Você apertou Ctrl+C | Normal; trate no script se necessário |
| 255 | Fatal error / out of range | “Falha severa” (muito comum em ssh) ou status “estourado” | ssh não conectou | Verifique rede/host/chaves; veja logs do comando |
Observação importante: o significado exato pode variar por programa, mas 126/127/130 são extremamente consistentes em shells como Bash.
Como identificar e corrigir erros no terminal
A ideia é sempre combinar: mensagem do comando + exit code + contexto (permissões, caminho, dependências, sinais).
1) Confirme o comando e o caminho
- O comando existe?
command -v nome_do_comando
which nome_do_comando
type nome_do_comandoSe isso não retornar nada, você está caminhando para 127.
- Confira se você está no diretório certo:
pwd
ls(Comandos em destaque: ls)
2) Erro 127: “command not found” (comando não encontrado)
Causas mais comuns:
- Digitou errado (
gtiem vez degit) - Pacote não instalado
- PATH não inclui o diretório do binário
Diagnóstico e correção:
command -v git
echo "$PATH"Instalação (exemplos):
- Debian/Ubuntu:
sudo apt install <pacote> - Fedora:
sudo dnf install <pacote> - Arch:
sudo pacman -S <pacote>
3) Erro 126: encontrado, mas não executável
Causas comuns:
- Falta permissão de execução
- Arquivo não é um executável válido
- Script sem “shebang” correto (
#!/bin/bash,#!/usr/bin/env python3) - Binário para outra arquitetura (ex.: ARM em x86_64)
Diagnóstico:
ls -l ./arquivo
file ./arquivo
head -n 1 ./script.shCorreções típicas:
chmod +x ./script.sh
./script.sh(Comando em destaque: chmod)
4) Erro 1: “deu errado”, mas por quê?
O código 1 costuma ser “falha genérica”. Então você depende da mensagem e, se necessário, de logs/trace.
Dicas práticas:
- Rode com mais verbosidade (quando existir):
-v,--verbose,--debug - Valide argumentos e arquivos de entrada
- Procure a palavra “error” no output:
comando 2>&1 | grep -i "error\|failed\|fatal"(Comando em destaque: grep)
5) Quando o programa morre por sinal (128 + N)
Se um processo for encerrado por um sinal, o shell costuma reportar:
128 + número_do_sinal
Exemplos úteis (bem comuns em Linux):
- 130 = 128 + 2 (SIGINT, Ctrl+C)
- 137 = 128 + 9 (SIGKILL, “morto à força”; muitas vezes OOM Killer)
- 139 = 128 + 11 (SIGSEGV, “segmentation fault”)
Para investigar sinais:
kill -l
dmesg | tail -n 50
journalctl -xe | tail -n 806) Saída de pipelines: o “pegadinha” do |
Por padrão, em Bash, o exit code de um pipeline é o do último comando.
Exemplo:
comando_que_falha | grep algo
echo $?Se você quer falhar quando qualquer etapa falhar:
set -o pipefailE, se precisar ver todos os status do pipeline (Bash):
echo "${PIPESTATUS[@]}"Dúvidas relacionadas (PAA)
O que significa o erro 127?
Significa que o shell não encontrou o comando: ele não existe, não está instalado, ou não está acessível via PATH. Use command -v <comando> para confirmar e instale o pacote correspondente.
Como ver o último código de erro gerado?
Use:
echo $?Isso mostra o exit code do comando executado imediatamente antes.
Qual a diferença entre erro de saída e erro padrão (stderr)?
- Exit code: um número (0–255) que indica sucesso/falha para scripts e automações.
- stderr: um fluxo de texto para mensagens de erro (ex.: “Permission denied”).
Um comando pode escrever em stderr e ainda sair com 0 (ou o contrário). Para separar/combinar:
comando 1>saida.txt 2>erros.txt
comando >tudo.txt 2>&1