web-dev-qa-db-fra.com

"Aucun fichier ou répertoire de ce type" mais il existe

Je veux simplement exécuter un exécutable à partir de la ligne de commande, ./arm-mingw32ce-g++

J'utilise Ubuntu Linux 10.10. ls -l

Utiliser Sudo (Sudo ./arm-mingw32ce-g++

Je n'ai aucune idée pourquoi le système d'exploitation ne peut même pas voir le fichier quand il est là. Des pensées?

66
Warpspace

Cette erreur peut signifier que ./arm-mingw32ce-g++ n'existe pas (mais c'est le cas) ou qu'il existe et qu'il s'agit d'un exécutable lié dynamiquement reconnu par le noyau mais dont le chargeur dynamique n'est pas disponible. Vous pouvez voir quel chargeur dynamique est requis en exécutant ldd /arm-mingw32ce-g++; tout ce qui est marqué not found est le chargeur dynamique ou une bibliothèque que vous devez installer.

Si vous essayez d'exécuter un binaire 32 bits sur une installation AMD64:

  • Jusqu'à Ubuntu 11.04, installez le paquet ia32-libs .
  • Sur Ubuntu 11.10, installez ia32-libs-multiarch .
  • À partir de 12.04, installez ia32-libs-multiarch , ou sélectionnez un ensemble raisonnable de packages :i386 en plus des packages :AMD64.
63
Gilles

J'ai rencontré cette erreur lorsque j'essayais de créer une source Selenium sur Ubuntu. Le script Shell simple avec Shebang correct n'a pas pu être exécuté même après que tous les prérequis aient été couverts.

file file-name # helped me in understanding that CRLF ending were present in the file.

J'ai ouvert le fichier dans Vim et je pouvais voir que c'était simplement au format DOS que j'avais édité ce fichier sur une machine Windows. J'ai converti le fichier au format Unix avec la commande ci-dessous:

dos2unix filename # actually helped me and things were fine.

J'espère que nous devrons faire attention chaque fois que nous éditerons des fichiers sur différentes plates-formes et que nous prendrons soin des formats de fichiers.

16
stupidnetizen

Cette erreur peut également se produire si vous essayez d'exécuter un script et que le message Shebang est mal orthographié. Assurez-vous qu’il lit #!/bin/sh, #!/bin/bash ou l’interprète que vous utilisez.

14
Zoltán

Le même message d'erreur apparaissait lorsque j'essayais d'exécuter un script Python - ce n'était pas le cas d'utilisation prévu de @ Warpspace (voir les autres commentaires), mais c'était l'un des principaux succès de ma recherche. Quelqu'un le trouvera peut-être utile.

Dans mon cas, c’est aux fins de ligne DOS (\r\n au lieu de \n) que la ligne Shebang (#!/usr/bin/env python) trébuchait. Un simple dos2unix myfile.py l'a corrigé.

7
djlauk

J'ai eu la même erreur pour un script bash simple qui n'aurait pas de problèmes 32/64-bit. C'est peut-être parce que le script que vous essayez d'exécuter contient une erreur. Cet article du forum ubuntu indique que, avec des fichiers de script normaux, vous pouvez ajouter "sh" devant et obtenir un résultat de débogage. par exemple.

$ Sudo sh arm-mingw32ce-g++

et voir si vous obtenez une sortie.

Dans mon cas, le problème était que le fichier que j'essayais d'exécuter était au format Windows plutôt que sous Linux.

3
icc97

J'ai eu cette erreur “No such file or directory” mais cela existe parce que mon fichier a été créé sous Windows et que j'ai essayé de l'exécuter sur Ubuntu et que le fichier contenait 15 non valide chaque fois qu'une nouvelle ligne était présente . Je viens de créer un nouveau fichier tronquant des indésirables des trucs

sleep: invalid time interval ‘15\r’
Try 'sleep --help' for more information.
script.sh: 5: script.sh: /opt/ag/cont: not found
script.sh: 6: script.sh: /opt/ag/cont: not found
root@Ubuntu14:/home/abc12/Desktop# vi script.sh 
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \r  \n   w   g   e   t       h   t   t   p   :   /

0000400   :   4   1   2   0   /  \r  \n
0000410
root@Ubuntu14:/home/abc12/Desktop# tr -d \\015 < script.sh > script.sh.fixed
root@Ubuntu14:/home/abc12/Desktop# od -c script.sh.fixed 
0000000   #   !   /   u   s   r   /   b   i   n   /   e   n   v       b
0000020   a   s   h  \n   w   g   e   t       h   t   t   p   :   /   /

0000400   /  \n
0000402
root@Ubuntu14:/home/abc12/Desktop# sh -x script.sh.fixed 
2
Pan

Comme mentionné par d'autres, c'est parce que le chargeur est introuvable, pas votre fichier exécutable. Malheureusement, le message n'est pas assez clair.

Vous pouvez résoudre ce problème en changeant le chargeur utilisé par votre exécutable. Voir ma réponse détaillée dans cette autre question: Plusieurs bibliothèques glibc sur un même hôte

En gros, vous devez trouver quel chargeur il essaie d'utiliser:

$ readelf -l arm-mingw32ce-g++ | grep interpreter
  [Requesting program interpreter: /lib/ld-linux.so.2]

Trouvez ensuite le bon chemin pour un chargeur équivalent et modifiez votre exécutable pour utiliser le chargeur à partir du chemin qu’il est réellement:

$ ./patchelf --set-interpreter /path/to/newglibc/ld-linux.so.2 arm-mingw32ce-g++

Vous aurez probablement besoin de définir le chemin des inclus aussi, vous saurez si vous le voulez ou non après avoir essayé de l'exécuter. Voir tous les détails dans cet autre fil.

1
msb

J'ai eu le même problème avec un fichier que j'ai créé sur mon mac . Si j'essaie de l'exécuter dans un shell avec ./filename j'ai le message d'erreur fichier non trouvé . mal avec le fichier.

ce que j'ai fait:

ouvrir une session ssh sur le serveur
cat nom du fichier
copier la sortie dans le presse-papier
rm nomfichier 
touch filename
vi nomfichier
i pour le mode insertion
coller le contenu du presse-papiers
ESC pour mettre fin au mode insertion
: wq!

Cela a fonctionné pour moi.

1
space

Je viens d'avoir ce problème dans mingw32 bash. J'avais exécuté node/npm à partir de Program Files (x86)\nodejs, puis je les avais déplacés dans le répertoire disabled (essentiellement en les supprimant du chemin). J'ai aussi eu Program Files\nodejs (c'est-à-dire une version 64 bits) dans le chemin, mais seulement après la version x86. Après avoir redémarré le shell bash, la version 64 bits de npm a pu être trouvée. node a fonctionné correctement tout le temps (vérifié avec node -v qui a changé lorsque la version x86 a été déplacée).

Je pense que hash -r aurait fonctionné au lieu de redémarrer bash: https://unix.stackexchange.com/a/5610

0
Pasi Savolainen

La commande ci-dessous a fonctionné sous 16.4 Ubuntu 

Ce problème survient lorsque votre fichier .sh est corrompu ou n'est pas formaté conformément aux protocoles Unix.

dos2unix convertit le fichier .sh au format Unix!

Sudo apt-get install dos2unix -y
dos2unix test.sh
Sudo chmod u+x test.sh 
Sudo ./test.sh
0
Coral