Frage Datei oder Verzeichnis existiert nicht? Aber die Datei existiert!


Ich habe ein Spiel heruntergeladen (Shank), aber die Bin-Datei wird nicht ausgeführt. Der Fehler, der angezeigt wird, wenn ich versuche, die ausführbare Datei zu starten, ist:

bash: ./shank-linux-120720110-1-bin: No such file or directory

149
2018-05-07 19:06


Ursprung


Vielleicht "chmod u + x ./shank*bin" zuerst? - agent86
Auch sollte das nicht '.bin' sein, sondern '-bin', vielleicht ist es nur ein Tippfehler - Anake
Danke für Ihre Antwort. Ich habe den Befehl gemacht, den du Agent86 gesagt hast, aber ich habe das gleiche Ergebnis. Ich habe auch die .deb-Datei heruntergeladen, aber es gibt auch ein Problem. Ich weiß nicht, welches Problem dieses Spiel hat. - Francesco
Bitte bestätigen Sie, ob Sie eine 64-Bit-Installation ausführen (das ist der häufigste Fall für dieses Problem). - Gilles
Ja, ich bestätige, dass ich eine 64-Bit-Architektur auf meinem Laptop verwende. - Francesco


Antworten:


Sie versuchen wahrscheinlich, eine 32-Bit-Binärdatei auf einem 64-Bit-System auszuführen, auf dem keine 32-Bit-Unterstützung installiert ist.

Es gibt drei Fälle, in denen Sie die Meldung "Keine solche Datei oder Verzeichnis" erhalten können:

  • Die Datei existiert nicht. Ich nehme an, Sie haben überprüft, dass die Datei existiert (vielleicht weil die Shell sie vervollständigt).
  • Es gibt eine Datei mit diesem Namen, aber es ist eine freie symbolische Verbindung.
  • Die Datei existiert und Sie können sie sogar lesen (z. B. den Befehl) file shank-linux-120720110-1-bin zeigt etwas wie "ELF 32-bit LSB executable ..." an, und doch, wenn Sie versuchen, es auszuführen, wird Ihnen gesagt, dass die Datei nicht existiert.

Die Fehlermeldung in diesem letzten Fall ist zugegebenermaßen verwirrend. Was Sie sagen, ist, dass eine Schlüsselkomponente der Laufzeitumgebung fehlt, die zum Ausführen des Programms erforderlich ist. Leider hat der Kanal, über den der Fehler gemeldet wird, nur Platz für den Fehlercode und nicht für diese zusätzliche Information, dass es wirklich die Laufzeitumgebung ist, die dafür verantwortlich ist. Wenn Sie die technische Version dieser Erklärung wünschen, lesen Sie Die Meldung "Nicht gefunden" wird angezeigt, wenn eine 32-Bit-Binärdatei auf einem 64-Bit-System ausgeführt wird.

Das file Befehl wird Ihnen sagen, was diese Binärdatei ist. Mit ein paar Ausnahmen können Sie nur eine Binärdatei für die Prozessorarchitektur ausführen, für die Ihre Version von Ubuntu vorgesehen ist. Die Hauptausnahme besteht darin, dass Sie 32-Bit-Binärdateien (x86, a.k.a. IA32) auf 64-Bit-Systemen (amd64, a.k.a. x86_64) ausführen können.

In Ubuntu bis 11.04, um eine 32-Bit-Binärdatei auf einer 64-Bit-Installation auszuführen, müssen Sie installiere das ia32-libs Paket  Install ia32-libs. Möglicherweise müssen Sie zusätzliche Bibliotheken installieren (Sie erhalten eine explizite Fehlermeldung, wenn Sie dies tun).

Seit 11.10 (oneirisch) eingeführt Multiarch Unterstützung können Sie noch installieren ia32-libs, aber Sie können einen feineren Ansatz wählen, es ist genug zu bekommen libc6-i386  Install libc6-i386 (plus jede andere notwendige Bibliothek).


201
2018-05-07 21:47



Danke für eine tolle Antwort, Gilles. Obwohl ich dieses Problem (noch nicht!) Noch nicht erlebt habe, habe ich Ihre Antwort zur zukünftigen Bezugnahme abgeschickt. - Jim C
Danke für deine ausführliche Antwort! Der Dateikorb, den ich heruntergeladen habe, war der einzige in diesem Format (bin). Also denke ich, ist gut für alle Architekturen. Ich habe auch die .deb-Datei für meine Architektur (64bit) heruntergeladen, aber mit anderem Fehler. An dieser Stelle denke ich, dass das Spiel von einigen Bugs betroffen ist oder ich das Spiel nicht installieren kann. Jetzt versuche ich libc6-i386 herunterzuladen und ich versuche es immer noch zu installieren. Ich werde wieder schreiben, wenn es signifikante Änderungen gibt. Danke für deine Zeit. - Francesco
@Francesco Bitte poste die Lösung! Es wird wahrscheinlich anderen Leuten helfen, Shank auf Ubuntu zu starten. Es ist völlig in Ordnung, deine eigene Frage zu beantworten. - Gilles
Sie können verwenden ldd um zu überprüfen, ob Sie eine Bibliothek vermissen. ldd kgio_ext.so könnte etwas wie sagen libruby.so.2.3 => not found unter anderen - EnabrenTane
Es gibt anscheinend ein anderes Szenario wenn bash: ...some...path...: No such file or directory kann nach dem Verschieben der ausführbaren Datei angezeigt werden. Bash scheint Pfade zu ausführbaren Dateien im $ PATH zu cachen; Lauf hash -r um es zu löschen. Sehen: unix.stackexchange.com/a/5610/11352 - akavel


64-Bit Ubuntu Multiarch-Systeme

Folgen Sie dieser Antwort nur, wenn die Ausgabe von file file-name zeigt an,

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

Um 32-Bit-ausführbare Datei in einem 64-Bit-Multi-Arch-Ubuntu-System ausführen zu können, müssen Sie hinzufügen i386 Architektur und auch Sie müssen installieren libc6:i386,libncurses5:i386,libstdc++6:i386 diese drei Bibliothekspakete.

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



Ich würde sudo für den letzten Befehl verwenden: Starten einer 32-Bit-Binärdatei (so offensichtlich nicht von Ihnen oder Ubuntu kompiliert) als sudo könnte riskant sein. (Nun, auch als nicht root, administered) - alci
was auch immer es sein mag, aber es funktioniert. - Avinash Raj
Es sollte beachtet werden, dass diese Antwort nicht gilt, wenn Sie CentOS oder RedHat verwenden. Aus diesem Grund wurde für ein paar Stunden abgeworfen. - oMiKeY
Auf Kali 2 64 Bit musste ich nur installieren libselinux1:i386 - Aralox


Durch die Installation der Deb für 32 Bit stellte ich fest, dass mir einige Bibliotheken fehlten (zusätzlich zu ia32-libs und libc6). Ich löste zuerst dieses Problem, indem ich diesen Befehl gab:

sudo apt-get install -f          

Dann habe ich einen weiteren Fehler bekommen:

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

Offensichtlich wurden diese Bibliotheken ordnungsgemäß installiert. Ohne ins Detail zu gehen, musste ich die Bibliotheken per Hand verknüpfen. Ich erkannte dann, dass auch eine einfachere Lösung durch Synaptic folgende Pakete installieren könnte:

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

Danach war das nächste Problem der schwarze Bildschirm während des Spiels, den ich löste, indem ich die ausführbare Datei in / Shank / bin durch folgende ersetzen konnte: http://treefort.icculus.org/smb/smb-linux-mesa-hotfix-test.tar.bz2.

Ich hoffe, dass es jemandem nützlich sein wird. Wenn Sie mehr Hilfe oder mehr Details benötigen, wenden Sie sich bitte an mich.


4
2018-05-09 19:12





Hier ist ein Transkript, das ein bisschen mehr über die Art des Problems zeigt und wie man es unter Ubuntu 16.04 beheben kann. Beachten Sie, dass obwohl file meldet "dynamisch verknüpft", ldd meldet "keine dynamische ausführbare Datei".

$ ./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

Sobald Sie libc6: i386 installiert haben, beginnen die Dinge zu verbessern ...

$ 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

Um den Job abzuschließen, müssen Sie eventuell zusätzliche Bibliotheken einzeln identifizieren und installieren ...

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

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

Ich weiß nicht, ob es eine systematische Möglichkeit gibt, die richtigen Bibliotheken zu finden, die installiert werden müssen. Es ist ein wenig rätselhaft, die Fehlermeldungen den Paketnamen zuzuordnen (Tabulatorvervollständigung hilft).


3
2018-06-08 20:57



ldd (Falsch) meldet "keine dynamische ausführbare Datei". - nobar


Um auf @Gilles Antwort zu erweitern, gibt es mindestens drei Szenarien, die zu diesem Fehler führen:

  1. Die Datei existiert nicht.
  2. Die Datei existiert, ist jedoch ein freihängender symbolischer Link.
  3. Die Datei existiert (z.B. file Befehl funktioniert), was zu einer verwirrenden Fehlermeldung führt. Dies kann bedeuten, dass ein Problem mit dem Loader vorliegt.

Kategorien von Ladeproblemen:

  1. Der Loader einer ausführbaren Datei existiert nicht. Sie können dies mit dem Befehl file prüfen und prüfen, ob der Loader existiert. Z.B.

    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
    

    Beachten interpreter /lib64/ld-lsb-x86-64.so.3; Wenn diese Datei nicht existiert, müssen Sie sie installieren. Für diesen speziellen Loader am 16.04, hat sich die Antwort herausgestellt sudo apt-get install lsb.

  2. Probleme mit dem Loader eines Skripts (siehe diese Antwort).

  3. Fehlende gemeinsame Bibliotheken - verwenden ldd <file-name> um nach "nicht gefundenen" Bibliotheken zu suchen. Sehen diese Antwort Für mehr Information.

Der Loader, der nicht existiert, könnte wegen eines 32/64 Bit-Mismatchs oder eines anderen Grundes sein. Es könnte andere Arten von Ladefehlern geben, von denen ich nichts weiß.


2
2018-05-11 18:54



In meinem Fall, file lmutil zeigte den Dolmetscher nicht, aber ldd getan und installiert lsb Problem gelöst. - meowsqueak