2012-06-12 21:26:53 +0000 2012-06-12 21:26:53 +0000
88
88

Como posso resolver o erro "cannot execute binary file"?

Quando faço login usando SSH, tudo o que consigo ver é isto…

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

Não consegui fazer nada aqui. Comandos como halt, poweroff, reboot, command not found irão retornar &007.

Como posso corrigir isto? Estou a usar Debian Squeeze Linux

Respostas (7)

92
92
92
2012-06-13 03:07:20 +0000

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

Normalmente a causa é correr um executável na arquitectura errada - se tentar correr executáveis x86 num CPU ARM, esta mensagem surge.

O /usr/bin/id foi substituído, possivelmente?

26
26
26
2012-06-13 01:27:14 +0000

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

9
9
9
2015-06-19 11:55:00 +0000

O problema é executar um binário para uma arquitectura de processador diferente. Você pode usar 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 este erro “cannot execute binary file” quando instalei o FF.Communicator - um plugin firefox para cromo (para que eu possa rodar páginas que usam applets java).

  • objdump mostra que o binário é 64-bit elf64-x86-64*
  • uname mostra que a minha máquina é 32-bit i686

  • objdump num binário em funcionamento na minha máquina mostra que é 32-bit elf32-i386*

Usando estas ferramentas pode verificar arquitecturas de máquinas e binários - não apenas arquitecturas intel mas qualquer processador.

Para utilizadores de Mac OSX, pode encontrar a informação da arquitectura de um ficheiro específico utilizando o comando “file”:

$ file filename_here
6
6
6
2012-06-12 21:51:34 +0000

Estou a fazer aqui algumas suposições selvagens, mas parece que está a acontecer o seguinte:

  1. Você faz login sobre SSH, acionando bash para executar o seu ~/.profile ou ~/.bashrc para configurar o seu ambiente para você (isto é normal).
  2. A certa altura tenta executar o /bin/id para obter o seu uid, que falha, causando erro de expressão inteira, e terminando o script antes de poder configurar o seu $PATH.
  3. Como o seu $PATH não está configurado, o bash só pode executar comandos com o caminho completo especificado.

Utilize o export PATH=/bin:/usr/bin:/sbin:/usr/sbin para corrigir o problema do $PATH até conseguir corrigir a causa raiz da falha do /bin/id.

0
0
0
2018-10-24 14:01:42 +0000

Isto significa que está a tentar executar um ficheiro binário utilizando o seu script bash que não se destina a ser executado como está a tentar ser executado. Já é um ficheiro binário e está a tentar usar o seu $SHELL para o analisar e correr.

num exemplo muito simples, se tentar correr o comando `w’ como

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

da mesma forma, pode estar a carregar no mesmo método ou como parece a partir do seu snippet de código.

Enquanto , para o resto dos comandos, estes comandos de parar, desligar, reiniciar, etc. são os comandos de raiz e precisam de prilveges de super-utilizador para correr e executar a operação necessária. utilizadores normais não os podem correr outra explicação é que estes comandos são colocados em /sbin/ e /usr/sbin , que podem não estar na sua variável $PATH ( que é utilizada para validar comandos sob a sua custódia )

0
0
0
2012-06-12 22:29:57 +0000

O ficheiro binário consiste em instruções da máquina que o processador pode compreender. O seu sistema operativo não significa que o mesmo executável irá funcionar. mova-se para a frente e para trás entre o conjunto de instruções do processador compatível com irá normalmente funcionar bem, se não forem compatíveis CPU não será capaz de compreender as instruções.

-1
-1
-1
2018-07-25 08:43:45 +0000

Está a correr uma versão errada do instalador, por exemplo, uma máquina de 64bit e a tentar instalar uma versão de 32bit do instalador.