Aucun fichier ou répertoire de ce nom? Mais le fichier existe!

186

J'ai téléchargé un jeu (Shank) mais le fichier bin ne s'exécute pas. L'erreur affichée lorsque j'essaie de lancer l'exécutable est la suivante:

bash: ./shank-linux-120720110-1-bin: No such file or directory
Francesco
la source
2
Peut-être "chmod u + x ./shank*bin" en premier?
agent86
cela ne devrait pas non plus être '.bin' plutôt que '-bin', c'est peut-être juste une faute de frappe
Anake
Merci pour votre réponse. J'ai fait la commande que vous avez dite Agent86 mais j'ai le même résultat. J'ai aussi téléchargé le fichier .deb mais il y a aussi un problème. Je ne sais pas quel problème a ce jeu.
Francesco
Veuillez confirmer si vous exécutez une installation 64 bits (c'est le cas le plus courant pour ce problème).
Gilles
Oui, je confirme que j'utilise une architecture 64 bits sur mon ordinateur portable.
Francesco

Réponses:

236

Vous essayez probablement d'exécuter un binaire 32 bits sur un système 64 bits sur lequel le support 32 bits n'est pas installé.

Vous pouvez obtenir le message «Aucun fichier ou répertoire de ce type» dans trois cas:

  • Le fichier n'existe pas. Je suppose que vous avez vérifié que le fichier existe (peut-être parce que le shell le complète).
  • Il existe un fichier portant ce nom, mais il s’agit d’un lien symbolique pendant.
  • Le fichier existe et vous pouvez même le lire (par exemple, la commande file shank-linux-120720110-1-binaffiche quelque chose comme «Exécutable ELB 32 bits ELF…»). Pourtant, lorsque vous essayez de l'exécuter, on vous dit que le fichier n'existe pas.

Le message d'erreur dans ce dernier cas est certes déroutant. Cela vous dit qu'il manque un composant clé de l'environnement d'exécution nécessaire à l'exécution du programme. Malheureusement, le canal par lequel l'erreur est signalée n'a de la place que pour le code d'erreur et non pour ces informations supplémentaires, à savoir que c'est vraiment l'environnement d'exécution qui est à blâmer. Si vous souhaitez connaître la version technique de cette explication, lisez le message Obtention du message «Introuvable» lors de l’exécution d’un fichier binaire 32 bits sur un système 64 bits .

La filecommande vous dira ce qu'est ce binaire. À quelques exceptions près, vous ne pouvez exécuter qu'un binaire pour l'architecture de processeur à laquelle votre version d'Ubuntu est destinée. La principale exception est que vous pouvez exécuter des fichiers binaires 32 bits (x86, IA32) sur des systèmes 64 bits (amd64, x86_64).

Dans Ubuntu jusqu’à la version 11.04, pour exécuter un fichier binaire 32 bits sur une installation 64 bits, vous devez installer le ia32-libspaquet Installez ia32-libs . Vous devrez peut-être installer des bibliothèques supplémentaires (vous obtiendrez un message d'erreur explicite si vous le faites).

Depuis 11.10 (oneiric) introduit le support multiarch , vous pouvez toujours installer ia32-libs, mais vous pouvez choisir une approche plus fine, c'est suffisant pour obtenir (plus toute autre bibliothèque nécessaire).libc6-i386 Installez libc6-i386

Gilles
la source
Merci pour cette excellente réponse, Gilles. Bien que je n’aie pas rencontré ce problème (pour le moment!), J’ai classé votre réponse pour référence future.
Jim C
Merci pour votre réponse exhaustive! Le fichier bin que j'ai téléchargé était le seul disponible dans ce format (bin). Donc, je pense que c'est bon pour toutes les architectures. J'ai également téléchargé le fichier .deb pour mon architecture (64 bits) mais avec une erreur différente. À ce stade, je pense que le jeu est affecté par des bugs ou je ne peux pas l'installer. Maintenant, j'essaie de télécharger libc6-i386 et j'essaie toujours de l'installer. Je vais écrire à nouveau s'il y a des changements importants. Merci pour votre temps.
Francesco
2
@ Francesco S'il vous plaît poster la solution! Il est susceptible d’aider d’autres personnes qui essaient de faire fonctionner Shank sur Ubuntu. C'est parfaitement correct de répondre à votre propre question .
Gilles
1
Vous pouvez utiliser lddpour vérifier s'il vous manque une bibliothèque. ldd kgio_ext.sopourrait dire quelque chose comme libruby.so.2.3 => not foundentre autres
EnabrenTane
1
Il y a apparemment un autre scénario où bash: ...some...path...: No such file or directorypeut apparaître: après avoir déplacé le fichier exécutable. Bash semble mettre en cache les chemins des exécutables trouvés dans $ PATH; courir hash -rpour le nettoyer. Voir: unix.stackexchange.com/a/5610/11352
akavel
53

Systèmes Multiarch Ubuntu 64 bits

Suivez cette réponse uniquement si la sortie de file file-nameshows,

file-name: ELF 32-bit LSB  executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.8, not stripped

Pour exécuter le fichier exécutable 32 bits dans un système Ubuntu multiarchitecture 64 bits, vous devez ajouter l' i386architecture et aussi vous devez installer libc6:i386, libncurses5:i386, libstdc++6:i386ces trois paquets de bibliothèque.

sudo dpkg --add-architecture i386
sudo apt-get update
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
./file-name
Avinash Raj
la source
J'utiliserais sudo pour la dernière commande: lancer un binaire 32 bits (donc, évidemment, pas compilé par Ubuntu ou vous-même), car sudo pourrait être risqué. (enfin, même en tant que non root, admettablement)
alci
quoi qu'il en soit, mais ça marche.
Avinash Raj
1
Il est à noter que si vous utilisez CentOS ou RedHat, cette réponse ne s'applique pas. A été jeté pendant quelques heures à cause de cela.
omikes
1
Sur Kali 2 64 bits, il me libselinux1:i386
suffisait
4

En installant le deb pour 32 bits, j'ai réalisé qu'il me manquait des bibliothèques (en plus de ia32-libs et de libc6). J'ai d'abord résolu ce problème en donnant cette commande:

sudo apt-get install -f          

Puis j'ai eu une autre erreur:

Message: SDL_GL_LoadLibrary 
Error: Failed loading libGL.so.1

Évidemment, ces bibliothèques ont été correctement installées. Sans entrer dans les détails, je devais relier les bibliothèques à la main. J'ai alors réalisé que Synaptic pourrait également installer une solution plus simple:

libgl1-mesa-glx:i386
libgl1-mesa-dri: i386.

Après cela, le problème suivant était l'écran noir pendant la lecture, que j'ai résolu en remplaçant l'exécutable dans / Shank / bin par ceci: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar .bz2 .

J'espère que cela sera utile à quelqu'un. Si vous avez besoin de plus d'aide ou de plus de détails, n'hésitez pas à me contacter.

Francesco
la source
3

Voici une transcription montrant un peu plus sur la nature du problème et comment le résoudre à partir de Ubuntu 16.04. Notez que même si les filerapports "liés dynamiquement", les lddrapports "ne sont pas un exécutable dynamique".

$ ./myprogram
bash: myprogram: No such file or directory

$ file myprogram
myprogram: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.2, for GNU/Linux 2.2.5, not stripped

$ ldd myprogram
    not a dynamic executable

Une fois que vous avez installé libc6: i386, les choses commencent à s’améliorer ...

$ sudo apt-get install libc6:i386 # the initial fix
...

$ ldd myprogram
    linux-gate.so.1 =>  (0xf77fd000)
    libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7626000)
    /lib/ld-linux.so.2 (0x56578000)

$ ./myprogram
myprogram: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory

Pour terminer le travail, vous devrez peut-être identifier et installer des bibliothèques supplémentaires, une à la fois ...

$ sudo apt-get install libstdc++6:i386 ## may require various additional libs

$ ./myprogram
... works correctly ...

Je ne sais pas s'il existe un moyen systématique d'identifier les bonnes bibliothèques à installer. Il y a un peu de approximation qui mappe les messages d'erreur aux noms de paquet (la complétion par un onglet aide).

nobar
la source
ldd(incorrectement) indique "pas un exécutable dynamique".
novembre
3

Pour développer la réponse @Gilles, il existe au moins trois scénarios entraînant cette erreur:

  1. Le fichier n'existe pas.
  2. Le fichier existe mais est un lien symbolique pendant.
  3. Le fichier existe (par exemple, la filecommande fonctionne), créant ainsi un message d'erreur déroutant. Cela peut signifier qu'il y a un problème avec le chargeur.

Catégories de problèmes de chargeur:

  1. Le chargeur d'un exécutable n'existe pas. Vous pouvez vérifier cela en utilisant la commande file et voir si le chargeur existe. Par exemple

    file lmgrd
    lmgrd: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-lsb-x86-64.so.3, for GNU/Linux 2.6.18, stripped
    

    Avis interpreter /lib64/ld-lsb-x86-64.so.3; si ce fichier n'existe pas, vous devez l'installer. Pour ce chargeur en particulier sur 16.04, la réponse s'est avérée être sudo apt-get install lsb.

  2. Problèmes avec le chargeur d'un script (voir cette réponse ).

  3. Bibliothèques partagées manquantes - permet de rechercher les bibliothèques ldd <file-name>"non trouvées". Voir cette réponse pour plus d'informations.

Le chargeur inexistant pourrait être dû à une non-concordance de 32/64 bits ou à une autre raison. Il y a peut-être d'autres types d'erreurs de chargement que je ne connais pas.

jtpereyda
la source
1
Dans mon cas, je file lmutiln'ai pas montré l'interprète, mais je l' ai lddfait, et l'installation a lsbrésolu le problème.
David