sup*_*ser 103 linux ssh debian bash
当我使用 SSH 登录时,我只能看到这个...
-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected
Run Code Online (Sandbox Code Playgroud)
我在这里什么也做不了。命令如halt,poweroff,reboot将返回command not found。
我怎样才能解决这个问题?我正在使用 Debian Squeeze Linux
Law*_*ceC 106
通常,该错误消息意味着 Linux 无法将该文件识别为 shell 脚本或可执行文件。
通常原因是在错误的体系结构上运行可执行文件 - 如果您尝试在 ARM CPU 上运行 x86 可执行文件,则会出现此消息。
是否/usr/bin/id被覆盖,可能?
gao*_*the 13
问题在于为不同的处理器架构运行二进制文件。您可以使用 objdump(来自 binutils)来检查二进制文件的架构。您可以使用 uname 来检查机器的架构。
例如,我在安装 FF.Communicator - chrome 的 firefox 插件时遇到了这个错误“无法执行二进制文件”(因此我可以运行使用 java 小程序的页面)。
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
Run Code Online (Sandbox Code Playgroud)
我在这里做了一些疯狂的猜测,但看起来正在发生以下情况:
bash为您运行~/.profile或~/.bashrc设置您的环境(这是正常的)。/bin/id以获取您的 uid,但失败,导致整数表达式错误,并在脚本可以设置您的$PATH.$PATH未设置,bash 只能运行指定完整路径的命令。使用export PATH=/bin:/usr/bin:/sbin:/usr/sbin修复$PATH问题,直到您可以修复的/ bin中/ ID的根本原因失败。
小智 6
这意味着您正在尝试使用 bash 脚本执行二进制文件,而该脚本并不打算按照您的预期运行。它已经是一个二进制文件,并且您正在尝试使用 $SHELL 来解析并运行它。
在一个非常简单的示例中,如果您尝试运行“w”命令,例如
$ bash w
/usr/bin/w: /usr/bin/w: cannot execute binary file
Run Code Online (Sandbox Code Playgroud)
类似地,您可能会使用相同的方法或从代码片段中看到的那样。
而对于其余命令,所有这些halt、shutdown、reboot等命令都是root拥有的命令,需要超级用户权限才能运行和执行所需的操作。普通用户无法运行它们另一个解释是这些命令放置在 /sbin/ 和 /usr/sbin 中,它们可能不在您的 $PATH 变量中(用于验证您保管的命令)
| 归档时间: |
|
| 查看次数: |
793897 次 |
| 最近记录: |