Como resolver: No such file or directory – Arquivo ou diretório não encontrado
Não é difícil no dia-a-dia da administração de servidores Linux ou no uso como estação de trabalho, o seguinte erro:
No such file or directory / Arquivo ou diretório não encontrado
Isso significa que o aplicativo tentou buscar um arquivo de texto, biblioteca ou diretório, porém nada foi encontrado no local esperado.
As falhas geralmente ocorrem quando:
- é feita a compilação de código fonte;
- é realizada a execução de daemons/serviços que fazem a leitura de arquivos de configuração que possuem as definições de locais de bibliotecas, arquivos de logs que apontam para locais errados.
Existem algumas formas de encontrar o arquivo ou diretório faltante, veja algumas alternativas:
O arquivo existe no sistema operacional e apenas está no local errado ou inesperado?
Comandos: updatedb / locate
O comando locate utiliza-se de base de dados local onde é indexado todos os arquivos do sistema operacional. Dessa forma, a procura pelo arquivo é extremamente rápida, entretanto o único pré-requisito é que o comando updatedb tenha sido executado recentemente para criar ou atualizar a base de dados. Caso contrário, mesmo que o arquivo exista e ele não está presente na base indexada, não será possível encontrá-lo com o comando locate.
Tente os comandos abaixo para chegar até o local correto do arquivo não encontrado:
1 2 3 4 5 6 7 8 9 10 |
updatedb #você precisa ser o usuário root para atualizar o índice locate apache2.conf #pode ser executado com o usuário comum locate -i apache2.conf #ignora o uso de maiúsculas e minúsculas locate -S #veja as estatística do banco de dados indexado Database /var/lib/mlocate/mlocate.db: 32.014 directories 325.169 files 17.609.598 bytes in file names 7.489.403 bytes used to store database |
Comando: find
O comando find funciona de forma parecida ao comando locate, porém na execução ele varre todo o sistema de arquivos em busca do arquivo especificado. A desvantagem é que, dependendo do diretório fornecido, a busca pode demorar vários minutos se o número de arquivos e o volume de dados do seu sistema forem grandes.
Veja alguns exemplos:
1 2 3 |
find /etc -name apache2.conf #procura somente dentro do diretório /etc pelo nome exato "apache2.conf" find / -iname apache2.conf #pode demorar mais, pois a busca será feita em todos os diretórios e ignora o uso maiúsculas e minúsculas |
Para ver outros exemplos de uso do comando find, acesse: http://pt.wikipedia.org/wiki/Find
Criar link simbólico como workaround
Se você encontrou o arquivo (exemplo: mylib.h) com o comando find ou então locate, é preciso apenas criar um link simbólico para resolver o erro no such file or directory / arquivo ou diretório não encontrado.
Em algumas situações como a compilação de software, o comando make espera encontrar a biblioteca no caminho A (/usr/lib/mylib.h) , porém o arquivo está presente no caminho B (/lib/usr/mylib.h).
O workaround que pode ser utilizado neste caso é a criação do link simbólico de A para B. Dessa forma, na próxima execução do comando make, a compilação irá encontrar o link simbólico (atalho) indicando onde a biblioteca requisitada realmente se encontra.
Abaixo o exemplo para criar o link simbólico:
1 |
ln -s /caminho/atual/descoberto/pelo/find-locate/arquivo.h /caminho/link/simbolico/arquivo.h |
Ao executar o comando ls -lh é possível verificar o link simbólico apontando para o arquivo real do sistema de arquivos:
1 2 |
ls -lh lrwxrwxrwx 1 mariano mariano 42 Mai 16 2013 /caminho/link/simbolico/arquivo.h -> /caminho/no/sistema-arquivos/arquivo.h |
E se nada for encontrado com o comando locate ou find?
Pode ser que o arquivo não encontrado nem exista no sistema operacional. Mas como descobrir de qual pacote .deb ou .rpm contém o arquivo faltante?
Existem alguns comandos que podem lhe ajudar com essa tarefa, veja:
Comando: apt-file para Ubuntu e derivados do Debian
O apt-file funciona de forma similar ao apt-get ou aptitude. A partir da lista de repositórios em /etc/apt/sources.list, o apt-file constrói a base de dados de pacotes disponíveis nos repositórios contendo: o nome do pacote e todos os arquivos presentes em cada um deles.
Veja como encontrar o pacote proprietário do arquivo “crack.h” que pode ser exigido em compilações de programas que utilizam bibliotecas de criptografia. Na imagem, o pacote que contem o arquivo “crack.h” é o libcrack2-dev. Neste caso, digite apt-get install libcrack2-dev e a compilação deve funcionar corretamente.
1 2 3 |
apt-file update #constrói e/ou atualiza a base de dados contendo os pacotes e lista de arquivos apt-file search crack.h #faz a busca por pacotes que possuem um arquivo com o nome "crack.h" |
Comando: yum whatprovides para CentOS, Red Hat e outras distribuição baseadas no RPM
De forma semelhante ao apt-file o yum whatprovies também faz a procura por pacotes RPM que contém determinado arquivo dentro do pacote. Para utilizá-lo:
1 |
yum whatprovides "*/crack.h" |
Ainda não encontrou o arquivo que precisava?
Assim como vários outros problemas são resolvidos desta forma, você ainda pode procurar no Google. 🙂 Mas caso conheça alguma ferramenta que pode ser utilizada para procurar arquivos no Linux, ou então, dentro de pacotes de outras distribuições como openSUSE, Slackware e etc, poste nos comentários o nome da aplicação.
Salvou minha pele amigo, consegui resolver o problema com o arquivo publc_html que não encontrava no ftp
Valeu!
BOA TARDE, ESTOU COM UM GRANDE PROBLEMA.
TRABALHO EM UMA CONTABILIDADE E TODO MÊS EU TRANSMITO ARQUIVO MFD DE 2 EMPRESAS, ATÉ ENTÃO TUDO BEM CONSEGUIA TRANSMITIR NORMAL. MAS A PARTIR DO MÊS PASSADO COMEÇOU A APARECER A SEGUINTE MENSAGEM.
* Arquivo não encontrado: /mfd/esperamfd/19802788000188.04670351.txt (No such file or directory)
E DESDE ENTÃO NÃO CONSIGO MAIS FAZER, PODE ME AJUDAR ?