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

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

当我用SSH登录时,只能看到这样的…..

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

我在这里什么都做不了。halt, poweroff, reboot, command not found, &007等命令都会返回&007.

我该怎么解决这个问题?我使用的是Debian Squeeze Linux

答案 (7)

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

通常情况下,这个错误信息意味着Linux没有识别出这个文件是shell脚本或可执行文件。

通常情况下,原因是在错误的架构上运行可执行文件–如果你试图在ARM CPU上运行x86可执行文件,就会出现这个消息。

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

试着用./executablefilename来运行它,而不是用sh executeablefilename。它毕竟不是一个shell脚本。

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

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

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

  • objdump显示二进制文件是64位 elf64-x86-64
  • uname显示我的机器是32位 *i686*
  • objdump在我的机器上的工作二进制文件上显示是32位 *elf32-i386*

使用这些工具,你可以检查机器的架构和二进制文件 - 不只是intel架构,而是任何处理器。

对于Mac OSX用户,你可以使用 "file "命令查找特定文件的架构信息:

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

我在这里胡乱猜测了一下,但看起来好像发生了以下情况:

  1. 你通过SSH登录,触发bash运行你的~/.profile~/.bashrc为你设置环境(这是正常的)。在某个时候,它试图执行/bin/id来获取你的uid,结果失败了,导致整数表达式错误,在它设置好你的$PATH之前终止脚本。因为你的$PATH没有设置好,所以bash只能运行指定完整路径的命令。

使用export PATH=/bin:/usr/bin:/sbin:/usr/sbin来修复$PATH问题,直到你能修复/bin/id失败的根本原因。

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

这意味着你正在尝试用你的bash脚本执行一个二进制文件,而这个二进制文件并不是你想运行的那样。在一个非常简单的例子中,如果你尝试运行像

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

这样的 “w "命令,你可能会遇到同样的方法,或者从你的代码片段来看,你可能会遇到同样的方法。

而对于你的其余命令,Al这些停止、关机、重启等命令都是根目录下的命令,需要超级用户来运行并执行所需的操作。

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

二进制文件由处理器能够理解的机器指令组成。你的操作系统并不意味着同一可执行文件就会运行。在处理器指令集之间来回移动兼容通常会有很好的效果,如果它们不兼容,CPU就会无法理解指令。

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

你运行的是错误的安装程序版本,例如64位机,并试图安装32位版的安装程序。