Como posso resolver o erro "não é possível executar o arquivo binário"?


80

Quando faço login usando SSH, tudo o que posso ver é isso ...

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

Eu não poderia fazer nada aqui. Comandos como halt, poweroff, rebootvai voltar command not found.

Como posso consertar isso? Estou usando o Debian Squeeze Linux


7
O que você fez com essa máquina?
slhck

11
a última coisa que fiz foi instalar o logwatch. Nada mais.
superusuário

3
PATHé uma variável de ambiente que contém uma lista de pastas que o shell procura por programas. lspor exemplo, geralmente se refere a /bin/ls, e seu shell a encontra percorrendo as pastas listadas PATHuma a uma até encontrá-la ou, se não encontrar em nenhuma delas, desiste. Suponho que um melhor ponto de partida seria, qual é o resultado echo $PATH? (edit: o exportcomando é uma maneira de definir uma variável de ambiente em bash.)
Darth Android

11
Ah ... eu avisei para não desligar o sistema: P Você pode obter acesso ao console (monitor físico + teclado conectado)? Tente inicializar o sistema no modo de usuário único (pode ser rotulado como modo de recuperação) e verifique se é possível acessar um shell raiz.
Darth Android

2
@ David, você não verá nenhuma saída após digitar export PATH=/bin:/user/bin:/sbin:/usr/sbin. É um comando silencioso.
Ben Richards

Respostas:


84

Normalmente, essa mensagem de erro significa que o Linux não reconhece o arquivo como um shell script ou como um arquivo executável.

Normalmente, a causa está executando um executável na arquitetura errada - se você tentar executar executáveis ​​x86 em uma CPU ARM, essa mensagem será exibida.

Foi /usr/bin/idsubstituído, possivelmente?


15
"se você tentar executar executáveis ​​x86 em uma CPU ARM, esta mensagem será exibida." Isso foi exatamente o que causou. Obrigado a todos por suas contribuições!
superusuário

Aconteceu que meu binário era um arquivo exe do Windows: P
forzagreen

Como podemos resolver isso? Estou certo de que recebo o mesmo problema, mas esta resposta realmente não me diz uma solução: /
Newskooler

Para resolver, você precisa usar um binário ARM e não um binário x86. Se a fonte estiver disponível, você poderá recompilar / reconstruir em um sistema ARM. Se a fonte não estiver disponível, verifique com o fornecedor um binário ARM. O JRE oficial da Sun, por exemplo, possui as versões x86 e "incorporada" ou ARM. Você precisa usar a versão do ARM.
LawrenceC

24

Tente executá-lo usando ./executablefilename em vez de sh executablefilename. Afinal, não é um script de shell.


Eu tive esse problema ao tentar executar o kiwix-serve no meu raspberry pi. Minha solução global Acredito foi ajustar as permissões de arquivo (não foi definida como executável por qualquer pessoa por padrão) e, em seguida, correu-lo como./kiwix-serve
cchapman

9

O problema está executando um binário para uma arquitetura de processador diferente. Você pode usar o objdump (do binutils) para verificar a arquitetura dos binários. Você pode usar uname para verificar a arquitetura de uma máquina.

por exemplo, encontrei esse erro "não é possível executar o arquivo binário" ao instalar o FF.Communicator - um plug-in do Firefox para Chrome (para que eu possa executar páginas que usam miniaplicativos java).

  • O objdump mostra que o binário é de 64 bits elf64-x86-64
  • uname mostra minha máquina é i686 de 32 bits

    $ ./FF.Communicator bash: ./FF.Communicator: não é possível executar o arquivo binário $ uname -mpio i686 i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator: formato de arquivo elf64-x86-64 ./FF.Communicator

  • objdump em um binário de trabalho na minha máquina mostra que é de 32 bits elf32-i386

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

Usando essas ferramentas, você pode verificar arquiteturas de máquinas e binários - não apenas arquiteturas intel, mas qualquer processador.

Para usuários do Mac OSX, você pode descobrir as informações de arquitetura de um arquivo específico usando o comando "file":

$ file filename_here

6

Estou fazendo algumas suposições malucas aqui, mas parece que o seguinte está acontecendo:

  1. Você efetua login pelo SSH, acionando bashpara executar seu ~/.profileou ~/.bashrcconfigurar seu ambiente para você (isso é normal).
  2. Em algum momento, ele tenta executar /bin/ido uid, o que falha, causando um erro de expressão inteira e finalizando o script antes que ele possa configurá-lo $PATH.
  3. Como o seu $PATHnão está definido, o bash só pode executar comandos com o caminho completo especificado.

Use export PATH=/bin:/usr/bin:/sbin:/usr/sbinpara corrigir o $PATHproblema até que você possa corrigir a causa raiz de / bin / id falhar.


0

O arquivo binário consiste em instruções da máquina que o processador pode entender. Seu sistema operacional não significa que o mesmo executável será executado. mover-se para frente e para trás entre o conjunto de instruções do processador compatível geralmente funcionará bem, se eles não forem compatíveis, a CPU não conseguirá entender as instruções.


0

Isso significa que você está tentando executar um arquivo binário usando seu script bash, que não se destina a ser executado como você está tentando. Já é um arquivo binário e você está tentando seu $ SHELL analisar e executá-lo.

em um exemplo muito simples, se você tentar executar o comando `w 'como

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

Da mesma forma, você pode estar usando o mesmo método ou a aparência do seu snippet de código.

Enquanto, para o restante dos seus comandos, todos esses comandos de parada, desligamento, reinicialização etc são os comandos de propriedade raiz e precisam de privilégios de superusuário para executar e executar a operação necessária. usuários normais não podem executá-los. Outra explicação é que esses comandos são colocados em / sbin / e / usr / sbin, que podem não estar na sua variável $ PATH (que é usada para validar comandos sob sua custódia)


-1

Você está executando a versão incorreta do instalador, por exemplo, uma máquina de 64 bits e tentando instalar a versão de 32 bits do instalador.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.