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


80

当我使用SSH登录时,我只能看到的是...

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

我在这里什么也不能做。命令如haltpoweroffreboot将返回command not found

我怎样才能解决这个问题?我正在使用Debian Squeeze Linux


7
您对那台机器做了什么?
slhck 2012年

1
我做的最后一件事是安装logwatch。没有其他的。
超级用户2012年

3
PATH是一个环境变量,其中包含外壳程序在其中搜索程序的文件夹列表。ls例如,通常指/bin/ls,并且您的shell通过逐个浏览列出的文件夹PATH来找到它,直到找到它为止;或者,如果在任何一个文件夹中都找不到它,它就会放弃。我想一个更好的起点是,输出是echo $PATH多少?(编辑:该export命令是在bash中定义环境变量的一种方法。)
Darth Android

1
啊...我警告过您不要关闭系统:P您可以通过控制台访问它(附加物理监视器和键盘)吗?尝试以单用户模式(可能被标记为恢复模式)引导系统,并查看是否可以进入root shell。
达斯Android

2
@David键入后将看不到任何输出export PATH=/bin:/user/bin:/sbin:/usr/sbin。这是一个无声的命令。
Ben Richards

Answers:


84

通常,该错误消息表示Linux无法将文件识别为Shell脚本或可执行文件。

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

没有/usr/bin/id被覆盖,可能?


15
“如果您尝试在ARM CPU上运行x86可执行文件,则会出现此消息。” 正是原因所在。感谢大家的投入!
超级用户2012年

原来我的二进制文件是Windows exe文件:P
forzagreen

我们该如何解决呢?我确定我也遇到了同样的问题,但是这个答案并没有真正告诉我一个解决方案:/
Newskooler

要解决此问题,您需要使用ARM二进制文件而不是x86二进制文件。如果源可用,则可以在ARM系统下重新编译/重建。如果源不可用,请与供应商联系以获取ARM二进制文件。例如,来自Sun的官方JRE具有x86和“嵌入式”或ARM版本。您必须使用ARM版本。
LawrenceC

24

尝试使用./executablefilename而不是sh可执行文件名运行它。毕竟,这不是shell脚本。


尝试在树莓派上运行kiwix-serve时遇到此问题。我相信我的整体解决方案是调整文件权限(默认情况下任何人都未将其设置为可执行文件),然后将其作为./kiwix-serve
cchapman

9

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

例如,在安装FF.Communicator-chrome的firefox插件时,我遇到此错误“无法执行二进制文件”(因此,我可以运行使用Java小程序的页面)。

  • objdump显示二进制文件是64位elf64-x86-64
  • uname显示我的机器是32位i686

    $ ./FF.Communicator bash:./FF.Communicator:无法执行二进制文件$ uname -mpio i686 i686 i386 GNU / Linux $ objdump -a ./FF.Communicator ./FF.Communicator:文件格式elf64-x86-64 ./FF。通讯员

  • 我机器上运行的二进制文件上的objdump显示它是32位elf32-i386

    $ objdump -a / bin / ls / bin / ls:文件格式elf32-i386

使用这些工具,您可以检查机器和二进制文件的体系结构-不仅是英特尔体系结构,还包括任何处理器。

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

$ file filename_here

6

我在这里做出了一些疯狂的猜测,但似乎正在发生以下情况:

  1. 您通过SSH登录,触发bash运行您的~/.profile~/.bashrc为您设置环境(这是正常的)。
  2. 在某个时候,它会尝试执行/bin/id以获取您的uid,该uid失败,从而导致整数表达式错误,并在可以设置您的之前终止脚本$PATH
  3. 由于$PATH未设置your ,因此bash仅能使用指定的完整路径运行命令。

使用export PATH=/bin:/usr/bin:/sbin:/usr/sbin修复$PATH问题,直到您可以修复/斌/ ID失败的根本原因。


0

二进制文件由处理器可以理解的机器指令组成。您的操作系统并不意味着将运行相同的可执行文件。在与处理器兼容的指令集之间来回移动通常会很好地工作,如果它们不兼容,CPU将无法理解指令。


0

这意味着您正在尝试使用bash脚本执行二进制文件,而该脚本不能像尝试那样运行。它已经是一个二进制文件,您正在尝试$ SHELL进行解析和运行。

在一个非常简单的示例中,如果您尝试运行“ w”命令,例如

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

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

而对于其余命令,这些暂停,关机,重新启动等命令是root拥有的命令,需要超级用户才能运行和执行所需的操作。普通用户无法运行它们。另一个解释是,这些命令位于/ sbin /和/ usr / sbin,它们可能不在$ PATH变量中(用于验证您托管中的命令)


-1

您正在运行错误版本的安装程序,例如64位计算机,并尝试安装32位版本的安装程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.