Normalerweise bedeutet diese Fehlermeldung, dass Linux die Datei nicht als Shell-Skript oder als ausführbare Datei erkennt.
Typischerweise ist die Ursache, dass eine ausführbare Datei auf der falschen Architektur ausgeführt wird – wenn Sie versuchen, ausführbare x86-Dateien auf einer ARM-CPU auszuführen, wird diese Meldung angezeigt.
Hat /usr/bin/id
gemacht überschrieben werden?
Versuchen Sie, es mit ./executablefilename statt mit sh executablefilename auszuführen. Es ist schließlich kein Shell-Skript.
Das Problem besteht darin, dass eine Binärdatei für eine andere Prozessorarchitektur ausgeführt wird. Sie können objdump (von binutils) verwenden, um die Architektur von Binärdateien zu überprüfen. Sie können uname verwenden, um die Architektur einer Maschine zu überprüfen.
z.B. Bei der Installation von FF.Communicator - einem Firefox-Plug-in für Chrome (damit ich Seiten ausführen kann, die Java-Applets verwenden) bin ich auf diesen Fehler "binäre Datei kann nicht ausgeführt werden" gestoßen.
- objdump zeigt, dass die Binärdatei 64-Bit elf64-x86-64 ist
-
uname zeigt, dass mein Computer 32-Bit i686 ist
$ ./FF.Communicatorbash:./FF.Communicator:Binärdatei kann nicht ausgeführt werden$ uname -mpioi686 i686 i386 GNU/Linux$ objdump -a ./FF.Communicator./FF.Communicator:Dateiformat elf64-x86-64./ FF.Communicator
-
objdump auf einer funktionierenden Binärdatei auf meinem Rechner zeigt, dass es 32-Bit elf32-i386 ist
$ objdump -a /bin/ls/bin/ls:Dateiformat elf32-i386
Mit diesen Tools können Sie die Architekturen von Maschinen und Binärdateien überprüfen - nicht nur Intel-Architekturen, sondern jeden Prozessor.
Benutzer von Mac OSX können die Architekturinformationen einer bestimmten Datei mit dem Befehl „Datei“ herausfinden:
$ file filename_here