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
, reboot
volverán command not found
.
¿Cómo puedo arreglar esto? Estoy usando Debian Squeeze Linux
PATH
es una variable de entorno que contiene una lista de carpetas en las que el shell busca programas.ls
por ejemplo, generalmente se refiere a/bin/ls
, y su shell lo encuentra revisando las carpetas enumeradasPATH
una 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 deecho $PATH
? (editar: elexport
comando es una forma de definir una variable de entorno en bash.)export PATH=/bin:/user/bin:/sbin:/usr/sbin
. Es una orden silenciosa.Respuestas:
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/id
sobrescribió, posiblemente?fuente
Intente ejecutarlo usando ./executablefilename en lugar de usar sh ejecutablefilename. No es un script de shell después de todo.
fuente
./kiwix-serve
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).
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":
fuente
Estoy haciendo algunas suposiciones aquí, pero parece que está sucediendo lo siguiente:
bash
ejecución de su~/.profile
o~/.bashrc
para configurar su entorno por usted (esto es normal)./bin/id
para obtener su uid, que falla, provocando un error de expresión entera y terminando el script antes de que pueda configurar su$PATH
.$PATH
no está configurado, bash solo puede ejecutar comandos con la ruta completa especificada.Úselo
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
para solucionar el$PATH
problema hasta que pueda solucionar la causa raíz del error / bin / id.fuente
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.
fuente
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
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)
fuente
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.
fuente