Как устранить ошибку «невозможно выполнить двоичный файл»?


80

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

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

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

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


7
Что ты сделал с этой машиной?
— slhck

1
самое последнее, что я сделал, это установил logwatch. Ничего больше.
— суперпользователь

3
PATHпеременная окружения, которая содержит список папок, которые оболочка ищет для программ. lsнапример, обычно ссылается /bin/ls, и ваша оболочка находит его, просматривая папки, перечисленные в PATHодной за другой, пока не найдет ее, или, если она не найдет ее ни в одной из них, она сдастся. Я полагаю, что лучшей отправной точкой было бы, каков результат echo $PATH? (edit: exportкоманда - это способ определить переменную окружения в bash.)
— Darth Android,

1
Ах ... Я предупредил вас не выключать систему: P Можете ли вы получить к ней консольный доступ (физический монитор + клавиатура подключены)? Попробуйте загрузить систему в однопользовательском режиме (может быть помечен как режим восстановления) и посмотрите, сможете ли вы добраться до корневой оболочки.
— Дарт Андроид

2
@ Давид вы не увидите ничего после ввода export PATH=/bin:/user/bin:/sbin:/usr/sbin. Это тихая команда.
— Бен Ричардс

Ответы:


84

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

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

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


15
«если вы попытаетесь запустить исполняемые файлы x86 на процессоре ARM, появится это сообщение». Это было именно то, что вызвало это. Спасибо всем за ваш вклад!
— суперпользователь

Оказалось, что мой бинарный файл был исполняемым файлом Windows: P
— forzagreen

Как мы можем решить это? Я уверен, что я получаю ту же проблему, но этот ответ не говорит мне о решении: /
— Newskooler

Чтобы решить, вам нужно использовать двоичный файл ARM, а не двоичный файл x86. Если источник доступен, вы можете перекомпилировать / перестроить в системе ARM. Если источник недоступен, свяжитесь с поставщиком для двоичного файла ARM. Например, официальная JRE от Sun имеет как x86, так и «встроенную» или ARM-версию. Вы должны использовать версию ARM.
— LawrenceC

24

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


У меня была эта проблема при попытке запустить kiwix-serve на моем Raspberry Pi. Мое общее решение, которое я считаю, состояло в том, чтобы отрегулировать права доступа к файлу (по умолчанию он не был назначен исполняемым пользователем), а затем ./kiwix-serve
— запустить

9

Проблема заключается в запуске двоичного файла для другой архитектуры процессора. Вы можете использовать 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

6

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

  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-разрядную версию установщика.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.