Come posso risolvere l'errore "impossibile eseguire il file binario"?


80

Quando eseguo l'accesso tramite SSH, tutto ciò che posso vedere è questo ...

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

Non ho potuto fare niente qui. Comandi come halt, poweroff, reboottorneranno command not found.

Come posso risolvere questo problema? Sto usando Debian Squeeze Linux


7
Cosa hai fatto a quella macchina?
slhck,

1
l'ultima cosa che ho fatto è stato installare logwatch. Nient'altro.
superutente il

3
PATHè una variabile di ambiente che contiene un elenco di cartelle in cui la shell cerca i programmi. lsper esempio, di solito si riferisce a /bin/ls, e la tua shell lo trova andando attraverso le cartelle elencate PATHuna per una finché non la trova, o se non la trova in nessuna di esse, si arrende. Suppongo che sarebbe un punto di partenza migliore, qual è l'output di echo $PATH? (modifica: il exportcomando è un modo per definire una variabile d'ambiente in bash.)
Darth Android

1
Ah ... ti avevo avvisato di non spegnere il sistema: P Riesci ad accedere alla console (monitor fisico + tastiera collegati)? Prova ad avviare il sistema in modalità utente singolo (potrebbe essere etichettato come modalità di ripristino) e vedi se riesci ad accedere a una shell di root.
Darth Android

2
@David non vedrai alcun output dopo aver digitato export PATH=/bin:/user/bin:/sbin:/usr/sbin. È un comando silenzioso.
Ben Richards,

Risposte:


84

Di solito quel messaggio di errore indica che Linux non riconosce il file come script di shell o come file eseguibile.

In genere la causa è l'esecuzione di un eseguibile con un'architettura errata: se si tenta di eseguire eseguibili x86 su una CPU ARM, viene visualizzato questo messaggio.

È /usr/bin/idstato sovrascritto, forse?


15
"se si tenta di eseguire eseguibili x86 su una CPU ARM, viene visualizzato questo messaggio." Questo è stato ESATTAMENTE ciò che l'ha causato. Grazie a tutti per i vostri input!
superutente il

Si è scoperto che il mio binario era un file exe di Windows: P
forzagreen

Come possiamo risolverlo? Sono sicuro di avere lo stesso problema, ma questa risposta non mi dice davvero una soluzione: /
Newskooler

Per risolvere, è necessario utilizzare un binario ARM e non un binario x86. Se l'origine è disponibile, è possibile ricompilare / ricostruire in un sistema ARM. Se la fonte non è disponibile, consultare il fornitore per un binario ARM. Il JRE ufficiale di Sun, ad esempio, ha entrambe le versioni x86 e "embedded" o ARM. Devi usare la versione ARM.
LawrenceC,

24

Prova a eseguirlo usando ./executablefilename invece di usare sh eseguablefilename. Dopotutto non è uno script di shell.


Ho avuto questo problema durante il tentativo di eseguire kiwix-serve sul mio Raspberry Pi. La mia soluzione complessiva credo sia stata quella di regolare i permessi dei file (non era impostato per essere eseguibile da nessuno per impostazione predefinita) e quindi eseguito come./kiwix-serve
cchapman

9

Il problema è l'esecuzione di un file binario per una diversa architettura del processore. Puoi usare objdump (da binutils) per controllare l'architettura dei binari. È possibile utilizzare uname per controllare l'architettura di una macchina.

ad esempio, ho riscontrato questo errore "impossibile eseguire il file binario" durante l'installazione di FF.Communicator, un plug-in firefox per Chrome (quindi posso eseguire pagine che utilizzano applet Java).

  • objdump mostra che il binario è a 64 bit elf64-x86-64
  • uname mostra che la mia macchina è i686 a 32 bit

    $ ./FF.Communicator bash: ./FF.Communicator: impossibile eseguire il file binario $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator: formato file elf64-x86-64 ./FF.Communicator

  • objdump su un binario funzionante sulla mia macchina mostra che è a 32 bit elf32-i386

    $ objdump -a / bin / ls / bin / ls: formato file elf32-i386

Usando questi strumenti puoi controllare le architetture di macchine e binari - non solo architetture Intel ma qualsiasi processore.

Per gli utenti di Mac OSX, puoi scoprire le informazioni sull'architettura di un file specifico usando il comando "file":

$ file filename_here

6

Sto facendo alcune ipotesi selvagge qui, ma sembra che stia succedendo quanto segue:

  1. Esegui l'accesso tramite SSH, attivando bashper eseguire il tuo ~/.profileo ~/.bashrcper impostare l'ambiente per te (questo è normale).
  2. Ad un certo punto tenta di eseguire /bin/idper ottenere il tuo uid, che non riesce, causando un errore di espressione intera e terminando lo script prima che possa impostare il tuo $PATH.
  3. Poiché $PATHnon è impostato, bash è in grado di eseguire comandi solo con il percorso completo specificato.

Utilizzare export PATH=/bin:/usr/bin:/sbin:/usr/sbinper risolvere il $PATHproblema fino a quando non è possibile correggere la causa principale dell'errore / bin / id.


0

il file binario è costituito da istruzioni della macchina che il processore può comprendere. Il tuo sistema operativo non significa che verrà eseguito lo stesso eseguibile. spostarsi avanti e indietro tra le istruzioni del processore con cui è compatibile il set di solito funzionerà bene, se non sono compatibili la CPU non sarà in grado di capire le istruzioni.


0

Ciò significa che stai tentando di eseguire un file binario usando il tuo script bash che non è previsto per essere eseguito come stai provando. È già un file binario e stai provando $ SHELL a analizzarlo ed eseguirlo.

in un esempio molto semplice, se si tenta di eseguire il comando `w 'come

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

allo stesso modo potresti colpire lo stesso metodo o come appare dallo snippet di codice.

Mentre, per il resto dei comandi, tutti questi comandi di arresto, arresto, riavvio, ecc. Sono i comandi di proprietà di root e necessitano di privilegi di superutente per eseguire ed eseguire l'operazione richiesta. gli utenti normali non possono eseguirle un'altra spiegazione è che questi comandi sono posizionati in / sbin / e / usr / sbin, che potrebbe non essere nella variabile $ PATH (che viene utilizzato per convalidare i comandi in custodia)


-1

Stai eseguendo una versione errata del programma di installazione, ad esempio una macchina a 64 bit e stai provando a installare la versione a 32 bit del programma di installazione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.