"No such file or directory" quando o arquivo existe
O que este artigo resolve
- Por que
lsmostra um arquivo mas voce ainda recebeNo such file or directory - Como diferenciar caracteres ocultos, CRLF, symlinks quebrados e dynamic linker ausente
- Como localizar um arquivo "existe mas inacessivel" com comandos concretos e corrigi-lo
Resposta rapida (triagem mais rapida)
Quando algo "esta la mas nao esta", geralmente e uma destas quatro situacoes:
- Caracteres ocultos no nome do arquivo -> revele com
ls -b - Shebang de script com CRLF ou caminho errado -> verifique finais de linha com
cat -A - Um symlink cujo alvo desapareceu -> vermelho no
ls -la, confirme comreadlink -f - Um executavel sem seu dynamic linker (interpretador ELF) -> verifique o tipo com
file
Executar apenas ls -b (caracteres ocultos) e ls -la (links quebrados) isola 80% dos casos.
Premissas (ambiente alvo)
- SO: Ubuntu / familia Debian (o raciocinio se aplica a outras distros tambem)
- Shell: bash
- Os exemplos usam nomes genericos como
targete./run
Por que um arquivo existente reporta "No such file or directory"?
Conclusao: Geralmente o nome de arquivo que voce ve e a string de caminho que o kernel busca nao correspondem byte a byte, ou a entidade de suporte do arquivo (alvo do link, interpretador) esta ausente.
A saida do ls e formatada para humanos: espacos finais, caracteres de controle e estados de link quebrado nao sao obvios a primeira vista. Chamadas de sistema como open() e stat(), porem, comparam a string do caminho byte a byte. Entao dois nomes podem parecer identicos na tela mas diferir em seus bytes reais, e o kernel retorna ENOENT (No such file or directory).
Este erro se divide em duas familias:
- Incompatibilidade na string do caminho: caracteres ocultos no nome, caminho relativo deslocado, contaminacao por CRLF
- Entidade de suporte ausente: alvo de symlink excluido, dynamic linker ausente para um binario
Triamos abaixo em ordem de frequencia.
Causa 1: Caracteres ocultos no nome do arquivo
Conclusao: Use
ls -bpara imprimir nomes de arquivo escapados e expor espacos finais, tabs ou espacos de largura total.
Copy-paste e scripts gerados podem adicionar um espaco final, newline ou espaco de largura total a um nome de arquivo. Parece target, mas se o nome real e target (espaco final), entao cat target naturalmente falha com No such file or directory.
ls -b
target\
Um \ (barra invertida + espaco) final prova que o nome contem espaco em branco. Tabs aparecem como \t; um espaco de largura total aparece como octal, por exemplo \343\200\200.
Para direcionar o arquivo de forma confiavel, use Tab completion ou capture os bytes reais com find e renomeie.
find . -maxdepth 1 -name 'target*' -print mv -i 'target ' target
ls | cat -A tambem ajuda. cat -A marca cada final de linha com $, entao um espaco final aparece logo antes do $.
Causa 2: O shebang do script tem CRLF ou caminho errado
Conclusao: Se
./script.sh: No such file or directoryaparece enquanto o arquivo claramente existe, suspeite de terminacao de linha CRLF ou caminho de interpretador inexistente no shebang.
Voce executa ./deploy.sh, recebe No such file or directory, mas ls -l deploy.sh mostra o arquivo la. Este e o classico problema de shebang. Arquivos editados no Windows usam terminacoes de linha CRLF (\r\n), entao #!/bin/bash e lido como #!/bin/bash\r. O kernel entao procura um interpretador no caminho /bin/bash\r e falha.
cat -A deploy.sh | head -1
#!/bin/bash^M$
Um ^M (CR) no final da linha confirma CRLF. Remova com sed ou dos2unix.
sed -i 's/\r$//' deploy.sh
O caminho do shebang em si tambem pode estar errado (por exemplo #!/usr/local/bin/python enquanto o binario real esta em /usr/bin/python3). Verifique o caminho com head -1 e confirme que existe com command -v.
head -1 deploy.sh command -v python3
Para o procedimento completo veja Corrigindo erro bad interpreter.
Causa 3: Um symlink cujo alvo desapareceu
Conclusao: O link em si ainda aparece no
ls, mas um symlink pendente retornaNo such file or directoryao acessar. Confirme com a cor nols -laereadlink -f.
Um link simbolico e uma referencia a outro caminho. Quando o alvo e excluido ou movido, o arquivo de link permanece enquanto seu conteudo desaparece. O nome aparece no ls, mas voce nao consegue abri-lo.
ls -la target
lrwxrwxrwx 1 user user 18 Jun 6 10:00 target -> /opt/app/current/bin
Em terminais coloridos, um link quebrado pisca em vermelho ou aparece invertido. Verifique se o alvo existe com readlink -f (que resolve ate o caminho real final) e um ls desse resultado.
readlink -f target ls -la "$(readlink -f target)"
Se esse ls retorna No such file or directory, o link esta quebrado. Recrie-o ou restaure o alvo correto.
ln -sfn /opt/app/releases/2026-06-06/bin target
Escrever atraves de um link, como em cp file target, pode resultar em cannot create ... No such file or directory quando o diretorio alvo do link desapareceu. Sempre verifique se o erro aponta para o alvo do link.
Causa 4: O binario esta sem seu dynamic linker (interpretador ELF)
Conclusao: Quando um binario compilado reporta
./run: No such file or directory, o item ausente nao e o arquivo mas o dynamic linker (ld-linux) ou ABI que ele requer. Verifique o formato comfile.
Um executavel ELF precisa de um "dynamic linker" loader na inicializacao. Se a arquitetura do binario (32/64-bit, arm/x86) difere do host, ou o dynamic linker necessario esta ausente, o kernel rejeita o loader como No such file or directory. A parte confusa: o que esta faltando e o loader, nao o binario em si.
file ./run
./run: ELF 32-bit LSB executable, Intel 80386, dynamically linked, interpreter /lib/ld-linux.so.2, ...
Se o loader indicado por interpreter /lib/ld-linux.so.2 esta ausente no host, o binario nao consegue iniciar. Confirme que o loader existe.
ls -l /lib/ld-linux.so.2
Para executar um binario 32-bit em um host 64-bit, instale o runtime 32-bit.
sudo dpkg --add-architecture i386 sudo apt update && sudo apt install libc6:i386
Se e uma incompatibilidade de arquitetura (um binario arm em x86, por exemplo), ele simplesmente nao pode rodar. Compare a saida do file com o uname -m do host.
Causa 5: Um componente do caminho ausente ou deslocado
Conclusao: Nem sempre e o arquivo final. Um diretorio intermediario ausente ou ilegivel tambem produz
No such file or directory. Rastreie o caminho um nivel de cada vez comnamei -l.
Quando voce nao consegue abrir /opt/app/data/config.yml, a peca faltante nao e necessariamente config.yml. O diretorio intermediario data pode nao existir ou ser um link quebrado. namei -l resolve o caminho da raiz ate o fim e mostra exatamente onde falhou.
namei -l /opt/app/data/config.yml
f: /opt/app/data/config.yml
drwxr-xr-x root root /
drwxr-xr-x root root opt
drwxr-xr-x root root app
data - No such file or directory
O nivel que reporta No such file or directory (aqui, data) e o responsavel.
Um caminho relativo deslocado tambem e comum. Se cd levou voce a um lugar inesperado, o mesmo ./config.yml aponta para outro lugar. Verifique sua localizacao com pwd, e use um caminho absoluto na duvida.
pwd cat /opt/app/data/config.yml
Um til entre aspas nao expande. cat "~/notes.txt" procura ~/notes.txt no diretorio atual e falha. Use cat ~/notes.txt (sem aspas) ou cat "$HOME/notes.txt".