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


J'ai téléchargé un jeu (Shank) mais le fichier bin ne fonctionne 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

149
2018-05-07 19:06


origine


Peut-être que "chmod u + x ./shank*bin" d'abord? - agent86
ne devrait pas non plus être ".bin" plutôt que "-bin", peut-être que c'est 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 également 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:


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

Il y a trois cas où vous pouvez obtenir le message «No such file or directory»:

  • Le fichier n'existe pas. Je suppose que vous avez vérifié que le fichier existe (peut-être parce que le shell le termine).
  • Il y a un fichier avec ce nom, mais c'est un lien symbolique qui pend.
  • Le fichier existe et vous pouvez même le lire (par exemple, la commande file shank-linux-120720110-1-bin affiche quelque chose comme «exécutable ELB 32 bits LSB…»), et pourtant, lorsque vous essayez de l'exécuter, vous êtes informé que le fichier n'existe pas.

Le message d'erreur dans ce dernier cas est confus. Ce qu’il vous dit, c’est qu’un élément clé de l’environnement d’exécution nécessaire pour exécuter le programme est manquant. Malheureusement, le canal par lequel l'erreur est signalée n'a de place que pour le code d'erreur et non pour cette information supplémentaire que c'est vraiment l'environnement d'exécution à blâmer. Si vous voulez la version technique de cette explication, lisez Obtenir un message «introuvable» lors de l'exécution d'un fichier binaire 32 bits sur un système 64 bits.

le file commande vous dira juste ce qu'est ce binaire. À quelques exceptions près, vous ne pouvez exécuter un binaire que pour l’architecture de processeur utilisée par votre version d’Ubuntu. La principale exception est que vous pouvez exécuter des binaires 32 bits (x86, a.k.a. IA.3) sur des systèmes 64 bits (amd64, a.k.a. x86_64).

Dans Ubuntu à 11.04, pour exécuter un fichier binaire 32 bits sur une installation 64 bits, vous devez installer le ia32-libs paquet  Install 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 (oniric) introduit multiarch soutien, vous pouvez toujours installer ia32-libs, mais vous pouvez choisir une approche plus fine, il suffit de libc6-i386  Install libc6-i386 (plus toute autre bibliothèque nécessaire).


201
2018-05-07 21:47



Merci pour votre réponse, Gilles. Bien que je n’ai pas encore rencontré ce problème (encore!), J’ai déposé votre réponse pour référence ultérieure. - Jim C
Merci pour votre réponse exhaustive! Le fichier 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 des erreurs différentes. À ce stade, je pense que le jeu est affecté par certains bugs ou je ne peux pas installer ce jeu. Maintenant, j'essaye 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
@Francesco Merci de poster la solution! Il est probable qu’il aide d’autres personnes qui tentent d’exécuter Shank sur Ubuntu. Il est parfaitement correct de répondre à votre propre question. - Gilles
Vous pouvez utiliser ldd pour vérifier si vous manquez une bibliothèque. ldd kgio_ext.so pourrait dire quelque chose comme libruby.so.2.3 => not found entre autres - EnabrenTane
Il y a apparemment un autre scénario quand bash: ...some...path...: No such file or directory peut apparaître: après avoir déplacé le fichier exécutable. Bash semble mettre en cache les chemins d'accès aux exécutables trouvés dans $ PATH; courir hash -r pour le vider. Voir: unix.stackexchange.com/a/5610/11352 - akavel


Systèmes Ubuntu Multiarch 64 bits

Suivez cette réponse seulement si la sortie de file file-name montre,

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 un fichier exécutable 32 bits dans un système Ubuntu multi-arch 64 bits, vous devez ajouter i386 l'architecture et aussi vous devez installer libc6:i386,libncurses5:i386,libstdc++6:i386 ces 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

40
2018-04-24 13:14



Je voudrais utiliser sudo pour la dernière commande: le lancement d'un fichier binaire de 32 bits (donc évidemment pas compilé par vous ou par Ubuntu), car sudo pourrait être risqué. (enfin, même en tant que non-racine, admet) - alci
quel que soit le dernier mais ça marche. - Avinash Raj
Il convient de noter que si vous utilisez CentOS ou RedHat, cette réponse ne s'applique pas. A été rejeté pendant quelques heures à cause de cela. - oMiKeY
Sur Kali 2 64 bit, je n'avais qu'à installer libselinux1:i386 - Aralox


En installant le deb pour 32 bits, j'ai réalisé que certaines bibliothèques manquaient (en plus de ia32-libs et 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

De toute évidence, ces bibliothèques ont été correctement installées. Sans entrer dans les détails, je devais relier les bibliothèques à la main. Je me suis alors rendu compte que l'installation de Synaptic pourrait également faciliter l'installation des paquets suivants:

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

Après cela, le problème suivant était l'écran noir lors de 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.


4
2018-05-09 19:12





Voici une transcription montrant un peu plus la nature du problème et la façon de le réparer à partir d'Ubuntu 16.04. Notez que même si file rapports "liés dynamiquement", ldd signale "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 installez 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 par une ...

$ 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 conjecture dans le mappage des messages d'erreur aux noms de paquets (la complétion par tabulation aide).


3
2018-06-08 20:57



ldd (incorrectement) signale "pas un exécutable dynamique". - nobar


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 en suspens.
  3. Le fichier existe (par ex. file commande fonctionne), créant 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 de fichier 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
    

    Remarquer interpreter /lib64/ld-lsb-x86-64.so.3; Si ce fichier n'existe pas, vous devez l'installer. Pour ce chargeur 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 - utiliser ldd <file-name> pour rechercher des bibliothèques "non trouvées". Voir cette réponse pour plus d'informations.

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


2
2018-05-11 18:54



Dans mon cas, file lmutil n'a pas montré l'interprète, mais ldd fait, et installer lsb résolu le problème. - meowsqueak