¿Cómo puedo resolver el error "no se puede ejecutar el archivo binario"?

80

Cuando inicio sesión con SSH, todo lo que puedo ver es esto ...

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

No pude hacer nada aquí. Comandos como halt, poweroff, rebootvolverán command not found.

¿Cómo puedo arreglar esto? Estoy usando Debian Squeeze Linux

superusuario
fuente
77
¿Qué le hiciste a esa máquina?
slhck
1
Lo último que hice fue instalar Logwatch. Nada más.
superusuario
3
PATHes una variable de entorno que contiene una lista de carpetas en las que el shell busca programas. lspor ejemplo, generalmente se refiere a /bin/ls, y su shell lo encuentra revisando las carpetas enumeradas PATHuna por una hasta que lo encuentra, o si no lo encuentra en ninguna de ellas, se da por vencido. Supongo que un mejor punto de partida sería, ¿cuál es la salida de echo $PATH? (editar: el exportcomando es una forma de definir una variable de entorno en bash.)
Darth Android
1
Ah ... Te advertí que no apagaras el sistema: P ¿Puedes acceder a la consola (monitor físico + teclado conectado)? Intente arrancar el sistema en modo de usuario único (podría etiquetarse como modo de recuperación) y vea si puede acceder a un shell raíz.
Darth Android
2
@David, no verá ningún resultado después de escribir export PATH=/bin:/user/bin:/sbin:/usr/sbin. Es una orden silenciosa.
Ben Richards

Respuestas:

84

Por lo general, ese mensaje de error significa que Linux no reconoce el archivo como un script de shell o como un archivo ejecutable.

Por lo general, la causa es ejecutar un ejecutable en la arquitectura incorrecta: si intenta ejecutar ejecutables x86 en una CPU ARM, aparece este mensaje.

¿Se /usr/bin/idsobrescribió, posiblemente?

LawrenceC
fuente
15
"si intenta ejecutar ejecutables x86 en una CPU ARM, aparece este mensaje". Eso fue EXACTAMENTE lo que lo causó. ¡Gracias a todos por sus aportes!
superusuario
Resultó que mi archivo binario era un archivo exe de Windows: P
forzagreen
¿Cómo podemos solucionar esto? Estoy seguro de que tengo el mismo problema, pero esta respuesta realmente no me dice una solución: /
Newskooler
Para resolverlo, debe usar un binario ARM y no un binario x86. Si la fuente está disponible, puede recompilar / reconstruir bajo un sistema ARM. Si la fuente no está disponible, verifique con el proveedor un binario ARM. El JRE oficial de Sun, por ejemplo, tiene versiones x86 e "incrustadas" o ARM. Tienes que usar la versión ARM.
LawrenceC
24

Intente ejecutarlo usando ./executablefilename en lugar de usar sh ejecutablefilename. No es un script de shell después de todo.

RidDeBakTiYar
fuente
Tuve este problema al intentar ejecutar kiwix-serve en mi raspberry pi. Creo que mi solución general fue ajustar los permisos del archivo (por defecto, nadie lo configuró como ejecutable) y luego lo ejecuté como./kiwix-serve
cchapman
9

El problema es ejecutar un binario para una arquitectura de procesador diferente. Puede usar objdump (de binutils) para verificar la arquitectura de los binarios. Puede usar uname para verificar la arquitectura de una máquina.

por ejemplo, encontré este error "no se puede ejecutar el archivo binario" al instalar FF.Communicator, un complemento de Firefox para Chrome (para poder ejecutar páginas que usan applets de Java).

  • objdump muestra que el binario es elf64-x86-64 de 64 bits
  • uname muestra que mi máquina es i686 de 32 bits

    $ ./FF.Communicator bash: ./FF.Communicator: no se puede ejecutar el archivo binario $ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator: formato de archivo elf64-x86-64 ./FF.Comunicador

  • objdump en un binario que funciona en mi máquina muestra que es elf32-i386 de 32 bits

    $ objdump -a / bin / ls / bin / ls: formato de archivo elf32-i386

Con estas herramientas puede verificar arquitecturas de máquinas y archivos binarios, no solo arquitecturas de inteligencia sino cualquier procesador.

Para los usuarios de Mac OSX, puede encontrar la información de arquitectura de un archivo específico utilizando el comando "archivo":

$ file filename_here
gaoithe
fuente
6

Estoy haciendo algunas suposiciones aquí, pero parece que está sucediendo lo siguiente:

  1. Inicia sesión a través de SSH, activando la bashejecución de su ~/.profileo ~/.bashrcpara configurar su entorno por usted (esto es normal).
  2. En algún momento, intenta ejecutarse /bin/idpara obtener su uid, que falla, provocando un error de expresión entera y terminando el script antes de que pueda configurar su $PATH.
  3. Como $PATHno está configurado, bash solo puede ejecutar comandos con la ruta completa especificada.

Úselo export PATH=/bin:/usr/bin:/sbin:/usr/sbinpara solucionar el $PATHproblema hasta que pueda solucionar la causa raíz del error / bin / id.

Darth Android
fuente
0

El archivo binario consta de instrucciones de máquina que el procesador puede entender. Su sistema operativo no significa que se ejecutará el mismo ejecutable. moverse hacia adelante y hacia atrás entre el conjunto de instrucciones de procesador compatible con el que generalmente funcionará bien, si no son compatibles, la CPU no podrá entender las instrucciones.

acoh Facha
fuente
0

Esto significa que está intentando ejecutar un archivo binario usando su script bash que no está destinado a ejecutarse como lo intenta. Ya es un archivo binario y está intentando su $ SHELL para analizarlo y ejecutarlo.

en un ejemplo muy simple, si intentas ejecutar el comando 'w' como

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

de manera similar, podría estar aplicando el mismo método o como se ve desde su fragmento de código.

Mientras que, para el resto de sus comandos, todos estos comandos de detención, apagado, reinicio, etc. son los comandos propiedad de la raíz y necesitan privilegios de superusuario para ejecutar y realizar la operación requerida. los usuarios normales no pueden ejecutarlos, otra explicación es que estos comandos se colocan en / sbin / y / usr / sbin, que podrían no estar en su variable $ PATH (que se usa para validar comandos bajo su custodia)

Nasir Mahmood
fuente
-1

Está ejecutando una versión incorrecta del instalador, por ejemplo, una máquina de 64 bits y está intentando instalar la versión de 32 bits del instalador.

kwai
fuente