2012-06-12 21:26:53 +0000 2012-06-12 21:26:53 +0000
88
88

Wie kann ich den Fehler "kann Binärdatei nicht ausführen" beheben?

Wenn ich mich mit SSH einlogge, sehe ich nur folgendes…

-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected

Ich konnte hier drin nichts tun. Befehle wie halt, poweroff, reboot, command not found geben &007 zurück.

Wie kann ich das beheben? Ich verwende Debian Squeeze Linux

Antworten (7)

92
92
92
2012-06-13 03:07:20 +0000

Gewöhnlich bedeutet diese Fehlermeldung, dass Linux die Datei nicht als Shell-Skript oder als ausführbare Datei erkennt.

Typischerweise liegt die Ursache darin, dass eine ausführbare Datei auf der falschen Architektur ausgeführt wird - wenn Sie versuchen, x86-ausführbare Dateien auf einer ARM-CPU auszuführen, erscheint diese Meldung.

Wurde /usr/bin/id möglicherweise überschrieben?

26
26
26
2012-06-13 01:27:14 +0000

Versuchen Sie, es mit ./executablefilename statt mit sh executablefilename auszuführen. Es handelt sich schließlich nicht um ein Shell-Skript.

9
9
9
2015-06-19 11:55:00 +0000

Das Problem ist die Ausführung einer Binärdatei für eine andere Prozessorarchitektur. Sie können objdump (aus binutils) verwenden, um die Architektur von Binärdateien zu prüfen. Sie können uname verwenden, um die Architektur eines Rechners zu überprüfen.

z.B. Ich bin auf den Fehler “cannot execute binary file” gestoßen, als ich FF.Communicator - ein Firefox-Plugin für Chrom - installiert habe (so daß ich Seiten ausführen kann, die Java-Applets verwenden).

  • objdump zeigt an, daß die Binärdatei 64-bit ist elf64-x86-64
  • uname zeigt an, daß meine Maschine 32-bit ist i686

  • objdump auf einer funktionierenden Binärdatei auf meiner Maschine zeigt an, daß sie 32-bit ist elf32-i386

Mit diesen Werkzeugen können Sie Architekturen von Maschinen und Binärdateien überprüfen - nicht nur Intel-Architekturen, sondern jeden Prozessor.

Für Mac OSX-Benutzer können Sie die Architektur-Informationen einer bestimmten Datei mit dem Befehl “file” herausfinden:

$ file filename_here
6
6
6
2012-06-12 21:51:34 +0000

Ich stelle hier einige wilde Vermutungen an, aber es sieht so aus, als ob folgendes passiert:

  1. Sie melden sich über SSH an und lösen bash aus, um Ihre ~/.profile auszuführen oder ~/.bashrc, um Ihre Umgebung für Sie einzurichten (das ist normal).
  2. Irgendwann versucht es, /bin/id auszuführen, um Ihre uid zu erhalten, was fehlschlägt, was einen Integer-Ausdrucksfehler verursacht, und das Skript beendet, bevor es Ihre $PATH einrichten kann.
  3. Da Ihre $PATH nicht gesetzt ist, kann die bash nur Befehle mit dem vollen angegebenen Pfad ausführen.

Benutzen Sie export PATH=/bin:/usr/bin:/sbin:/usr/sbin, um das Problem mit $PATH zu beheben, bis Sie die Ursache des Fehlschlagens von /bin/id beheben können.

0
0
0
2018-10-24 14:01:42 +0000

Das bedeutet, dass Sie versuchen, mit Ihrem Bash-Skript eine Binärdatei auszuführen, die nicht so ausgeführt werden soll, wie Sie es versuchen. Es handelt sich bereits um eine Binärdatei, und Sie versuchen, sie mit Ihrer $SHELL zu parsen und auszuführen.

in einem sehr einfachen Beispiel: Wenn Sie versuchen, den Befehl `w’ wie

$ bash w
/usr/bin/w: /usr/bin/w: cannot execute binary file

in ähnlicher Weise auszuführen, könnten Sie auf die gleiche Methode oder auf die gleiche Weise, wie sie aus Ihrem Codeausschnitt aussieht, stoßen.

Während für die verbleibenden Befehle alle diese Befehle halt, shutdown , reboot usw. die Befehle im Besitz von root sind und Super-User-Privilegien benötigen, um die erforderliche Operation auszuführen und auszuführen. normale Benutzer können sie nicht ausführen. Eine andere Erklärung ist, dass diese Befehle in /sbin/ und /usr/sbin stehen, die möglicherweise nicht in Ihrer $PATH-Variable stehen (die zur Validierung von Befehlen in Ihrem Gewahrsam verwendet wird).

0
0
0
2012-06-12 22:29:57 +0000

Binärdatei besteht aus Maschinenbefehlen, die der Prozessor verstehen kann. Ihr Betriebssystem bedeutet nicht, dass die gleiche ausführbare Datei ausgeführt wird. Hin- und Herbewegen zwischen dem Prozessor-Befehlssatz kompatibel mit wird in der Regel gut funktionieren, wenn sie nicht kompatibel sind CPU wird nicht in der Lage sein, Anweisungen zu verstehen.

-1
-1
-1
2018-07-25 08:43:45 +0000

Sie verwenden eine falsche Version des Installationsprogramms, z.B. einen 64-Bit-Rechner und versuchen, eine 32-Bit-Version des Installationsprogramms zu installieren.