70

Когда я захожу через SSH, я вижу только это ...

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

Я ничего не мог сделать здесь. Такие команды, как halt , poweroff , reboot , вернут command not found .

Как я могу это исправить? Я использую Debian Squeeze Linux

7 ответов7

75

Обычно это сообщение об ошибке означает, что Linux не распознает файл как сценарий оболочки или как исполняемый файл.

Обычно причиной является запуск исполняемого файла в неправильной архитектуре - если вы попытаетесь запустить исполняемые файлы x86 на процессоре ARM, появится это сообщение.

Возможно, файл /usr/bin/id перезаписан?

22

Попробуйте запустить его, используя ./executablefilename вместо использования sh executetablefilename. В конце концов, это не скрипт оболочки.

8

Проблема заключается в запуске двоичного файла для другой архитектуры процессора. Вы можете использовать objdump (из binutils) для проверки архитектуры двоичных файлов. Вы можете использовать uname для проверки архитектуры машины.

Например, я столкнулся с этой ошибкой "невозможно выполнить двоичный файл" при установке FF.Communicator - плагина Firefox для Chrome (поэтому я могу запускать страницы, которые используют 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.Communicator

  • objdump на работающем бинарнике на моей машине показывает, что это 32-битный elf32-i386

    $ objdump -a /bin /ls /bin /ls: формат файла elf32-i386

Используя эти инструменты, вы можете проверять архитектуры машин и двоичных файлов - не только архитектуры Intel, но и любого процессора.

Для пользователей Mac OSX вы можете узнать информацию об архитектуре определенного файла, используя команду "file":

$ file filename_here
5

Я делаю некоторые дикие предположения здесь, но похоже, что происходит следующее:

  1. Вы входите через SSH, вызывая bash для запуска ~/.profile или ~/.bashrc для настройки вашей среды (это нормально).
  2. В какой-то момент он пытается выполнить /bin/id чтобы получить ваш uid, который завершается неудачно, вызывая ошибку целочисленного выражения и завершая работу сценария, прежде чем он сможет настроить ваш $PATH .
  3. Поскольку ваш $PATH не установлен, bash может выполнять команды только с указанным полным путем.

Используйте export PATH=/bin:/usr/bin:/sbin:/usr/sbin чтобы исправить проблему $PATH пока не сможете устранить основную причину сбоя /bin /id.

0

двоичный файл состоит из машинных инструкций, которые процессор может понять. Ваша операционная система не означает, что один и тот же исполняемый файл будет работать. перемещение вперед и назад между набором команд процессора, совместимым с, обычно будет работать хорошо, если они несовместимы, процессор не сможет понять инструкции.

0

Это означает, что вы пытаетесь выполнить двоичный файл, используя ваш bash-скрипт, который не предназначен для запуска так, как вы пытаетесь. Это уже бинарный файл, и вы пытаетесь проанализировать и запустить его $ SHELL.

в очень простом примере, если вы попытаетесь запустить команду `w ', как

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

Точно так же вы можете использовать тот же метод или как он выглядит из вашего фрагмента кода.

В то время как для остальных команд все эти команды останова, выключения, перезагрузки и т.д. Являются командами, принадлежащими корню, и для выполнения и выполнения требуемой операции требуются привилегированные привилегированные права пользователя. обычные пользователи не могут запускать их. Другое объяснение состоит в том, что эти команды размещены в /sbin / и / usr /sbin, которых может не быть в вашей переменной $ PATH (которая используется для проверки команд в вашем распоряжении)

-1

Вы используете неверную версию установщика, например, 64-разрядную машину и пытаетесь установить 32-разрядную версию установщика.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .