Wenn ich mich mit SSH anmelde, sehe ich nur Folgendes ...
-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected
Ich konnte hier nichts machen. Befehle wie halt
, poweroff
, reboot
zurückkehren wird command not found
.
Wie kann ich das beheben? Ich benutze Debian Squeeze Linux
PATH
ist eine Umgebungsvariable, die eine Liste von Ordnern enthält, die die Shell nach Programmen durchsucht.ls
B. bezieht sich normalerweise auf/bin/ls
, und Ihre Shell findet es, indem sie die OrdnerPATH
nacheinander durchsucht, bis sie es findet, oder wenn sie es in keinem von ihnen findet, gibt sie es auf. Ich nehme an, ein besserer Ausgangspunkt wäre, was ist die Ausgabe vonecho $PATH
? (Bearbeiten: Derexport
Befehl ist eine Möglichkeit, eine Umgebungsvariable in Bash zu definieren.)export PATH=/bin:/user/bin:/sbin:/usr/sbin
. Es ist ein stiller Befehl.Antworten:
Normalerweise bedeutet diese Fehlermeldung, dass Linux die Datei nicht als Shell-Skript oder als ausführbare Datei erkennt.
In der Regel wird eine ausführbare Datei auf der falschen Architektur ausgeführt. Wenn Sie versuchen, x86-ausführbare Dateien auf einer ARM-CPU auszuführen, wird diese Meldung angezeigt.
Wurde
/usr/bin/id
möglicherweise überschrieben?quelle
Versuchen Sie, es mit ./executablefilename anstelle von sh executablefilename auszuführen. Es ist schließlich kein Shell-Skript.
quelle
./kiwix-serve
Das Problem besteht darin, eine Binärdatei für eine andere Prozessorarchitektur auszuführen. Sie können objdump (from binutils) verwenden, um die Architektur von Binärdateien zu überprüfen. Sie können uname verwenden, um die Architektur eines Computers zu überprüfen.
Ich habe zB diesen Fehler "kann keine Binärdatei ausführen" festgestellt, als ich FF.Communicator - ein Firefox-Plugin für Chrome - installiert habe (damit ich Seiten ausführen kann, die Java-Applets verwenden).
uname zeigt an, dass mein Rechner ein 32-Bit- i686 ist
$ ./FF.Communicator bash: ./FF.Communicator: Binärdatei $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator: Dateiformat elf64-x86-64 kann nicht ausgeführt werden ./FF.Communicator
objdump auf einer funktionierenden Binärdatei auf meinem Computer zeigt, dass es sich um 32-Bit- elf32-i386 handelt
$ objdump -a / bin / ls / bin / ls: Dateiformat elf32-i386
Mit diesen Tools können Sie Architekturen von Maschinen und Binärdateien überprüfen - nicht nur Intel-Architekturen, sondern alle Prozessoren.
Für Mac OS X-Benutzer können Sie die Architekturinformationen einer bestimmten Datei mit dem Befehl "file" ermitteln:
quelle
Ich mache hier einige wilde Vermutungen, aber es sieht so aus, als ob Folgendes passiert:
bash
an und starten , um Ihre Umgebung auszuführen~/.profile
oder~/.bashrc
einzurichten (dies ist normal)./bin/id
, um Ihre UID abzurufen, was fehlschlägt, einen Fehler beim Ausdruck ganzer Zahlen verursacht und das Skript beendet, bevor es Ihre einrichten kann$PATH
.$PATH
nicht gesetzt ist, kann bash nur Befehle mit dem angegebenen vollständigen Pfad ausführen.Verwenden Sie diese Option
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
, um das$PATH
Problem zu beheben , bis Sie die Grundursache für das Fehlschlagen von / bin / id beheben können.quelle
Die Binärdatei besteht aus Maschinenanweisungen, die der Prozessor verstehen kann. Ihr Betriebssystem bedeutet nicht, dass dieselbe ausführbare Datei ausgeführt wird. Das Hin- und Herbewegen zwischen dem mit kompatiblen Prozessorbefehlssatz funktioniert normalerweise gut, wenn sie nicht kompatibel sind, kann die CPU die Befehle nicht verstehen.
quelle
Dies bedeutet, dass Sie versuchen, eine Binärdatei mit Ihrem Bash-Skript auszuführen, das nicht so ausgeführt werden soll, wie Sie es möchten. Es ist bereits eine Binärdatei und Sie versuchen, $ SHELL zu analysieren und auszuführen.
in einem sehr einfachen Beispiel, wenn Sie versuchen, den Befehl "w" auszuführen, wie
In ähnlicher Weise könnten Sie die gleiche Methode anwenden oder wie es aus Ihrem Code-Snippet aussieht.
Während für die verbleibenden Befehle Alle diese Befehle zum Anhalten, Herunterfahren, Neustarten usw. die root-Befehle sind und Super-User-Prilveges benötigen, um den erforderlichen Vorgang auszuführen und auszuführen. Normale Benutzer können sie nicht ausführen. Eine andere Erklärung ist, dass diese Befehle unter / sbin / und / usr / sbin abgelegt sind. Diese befinden sich möglicherweise nicht in Ihrer $ PATH-Variablen (mit der Befehle in Ihrer Aufbewahrung überprüft werden).
quelle
Sie führen eine falsche Version des Installationsprogramms aus, z. B. einen 64-Bit-Computer, und versuchen, die 32-Bit-Version des Installationsprogramms zu installieren.
quelle