如何解决“无法执行二进制文件”的错误?

如何解决“无法执行二进制文件”的错误?

当我使用 SSH 登录时,我所能看到的只有这个……

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

我在这里什么也做不了。诸如haltpoweroff、之类的命令reboot将返回command not found

我该如何解决这个问题?我正在使用 Debian Squeeze Linux

答案1

通常,该错误消息意味着 Linux 无法将该文件识别为 shell 脚本或可执行文件。

通常原因是在错误的架构上运行可执行文件 - 如果您尝试在 ARM CPU 上运行 x86 可执行文件,就会出现此消息。

/usr/bin/id可能被覆盖了吗?

答案2

尝试使用 ./executablefilename 来运行它,而不是使用 sh executablefilename。毕竟它不是 shell 脚本。

答案3

问题在于运行针对不同处理器架构的二进制文件。您可以使用 objdump(来自 binutils)检查二进制文件的架构。您可以使用 uname 检查机器的架构。

例如,我在安装 FF.Communicator(chrome 的 Firefox 插件)时遇到了这个错误“无法执行二进制文件”(这样我就可以运行使用 java 小程序的页面)。

  • 对象转储显示二进制文件是 64 位elf64-x86-64

  • 尤纳姆显示我的机器是 32 位i686

    $ ./FF.Communicator 
    bash: ./FF.Communicator: cannot execute binary file
    $ uname -mpio
    i686 i686 i386 GNU/Linux
    $ objdump -a ./FF.Communicator 
    ./FF.Communicator:     file format elf64-x86-64
    ./FF.Communicator
    
  • 对象转储在我的计算机上运行的二进制文件显示它是 32 位elf32-i386

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

使用这些工具,您可以检查机器和二进制文件的架构 - 不仅仅是英特尔架构,而且是任何处理器。

对于 Mac OSX 用户,您可以使用“file”命令找出特定文件的架构信息:

$ file filename_here

答案4

这意味着您正在尝试使用 bash 脚本执行一个二进制文件,而该文件并非按照您的意图运行。它已经是一个二进制文件,您正在尝试使用 $SHELL 来解析和运行它。

举一个非常简单的例子,如果你尝试运行“w”命令,例如

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

类似地,您可能会遇到相同的方法,或者从您的代码片段中看到相同的方法。

而对于其余的命令,所有这些 halt、shutdown、reboot 等命令都是 root 拥有的命令,需要超级用户权限才能运行并执行所需的操作。普通用户无法运行它们,另一种解释是这些命令放在 /sbin/ 和 /usr/sbin 中,这可能不在您的 $PATH 变量中(用于验证您保管的命令)

相关内容