Когда я захожу через SSH, я вижу только это ...
-bash: /usr/bin/id: cannot execute binary file
-bash: [: : integer expression expected
Я ничего не мог сделать здесь. Такие команды, как halt
, poweroff
, reboot
будет возвращаться command not found
.
Как я могу это исправить? Я использую Debian Squeeze Linux
PATH
переменная окружения, которая содержит список папок, которые оболочка ищет для программ.ls
например, обычно ссылается/bin/ls
, и ваша оболочка находит его, просматривая папки, перечисленные вPATH
одной за другой, пока не найдет ее, или, если она не найдет ее ни в одной из них, она сдастся. Я полагаю, что лучшей отправной точкой было бы, каков результатecho $PATH
? (edit:export
команда - это способ определить переменную окружения в bash.)export PATH=/bin:/user/bin:/sbin:/usr/sbin
. Это тихая команда.Ответы:
Обычно это сообщение об ошибке означает, что Linux не распознает файл как сценарий оболочки или как исполняемый файл.
Обычно причиной является запуск исполняемого файла в неправильной архитектуре - если вы попытаетесь запустить исполняемые файлы x86 на процессоре ARM, появится это сообщение.
Возможно
/usr/bin/id
переписали, возможно?источник
Попробуйте запустить его, используя ./executablefilename вместо использования sh executetablefilename. В конце концов, это не скрипт оболочки.
источник
./kiwix-serve
Проблема заключается в запуске двоичного файла для другой архитектуры процессора. Вы можете использовать objdump (из binutils) для проверки архитектуры двоичных файлов. Вы можете использовать uname для проверки архитектуры машины.
Например, я столкнулся с этой ошибкой «невозможно выполнить двоичный файл» при установке FF.Communicator - плагина Firefox для Chrome (поэтому я могу запускать страницы, которые используют 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.Communicator
objdump на работающем бинарнике на моей машине показывает, что это 32-битный elf32-i386
$ objdump -a / bin / ls / bin / ls: формат файла elf32-i386
Используя эти инструменты, вы можете проверять архитектуры машин и двоичных файлов - не только архитектуры Intel, но и любого процессора.
Для пользователей Mac OSX вы можете узнать информацию об архитектуре определенного файла, используя команду «file»:
источник
Я делаю некоторые дикие предположения здесь, но похоже, что происходит следующее:
bash
запуск~/.profile
или~/.bashrc
настройку среды для вас (это нормально)./bin/id
чтобы получить ваш uid, который завершается неудачно, вызывает ошибку целочисленного выражения и завершает работу сценария, прежде чем он сможет настроить ваш$PATH
.$PATH
опция не установлена, bash может выполнять команды только с указанным полным путем.Используйте
export PATH=/bin:/usr/bin:/sbin:/usr/sbin
для устранения$PATH
проблемы, пока не сможете устранить основную причину сбоя / bin / id.источник
двоичный файл состоит из машинных инструкций, которые процессор может понять. Ваша операционная система не означает, что один и тот же исполняемый файл будет работать. перемещение вперед и назад между набором команд процессора, совместимым с, обычно будет работать хорошо, если они несовместимы, процессор не сможет понять инструкции.
источник
Это означает, что вы пытаетесь выполнить двоичный файл, используя ваш bash-скрипт, который не предназначен для запуска так, как вы пытаетесь. Это уже бинарный файл, и вы пытаетесь проанализировать и запустить его $ SHELL.
в очень простом примере, если вы попытаетесь запустить команду `w ', как
Точно так же вы можете использовать тот же метод или как он выглядит из вашего фрагмента кода.
В то время как для остальных команд все эти команды останова, выключения, перезагрузки и т. Д. Являются командами, принадлежащими корню, и для выполнения и выполнения требуемой операции требуются привилегированные привилегированные права пользователя. обычные пользователи не могут запустить их, другое объяснение состоит в том, что эти команды размещены в / sbin / и / usr / sbin, которых может не быть в вашей переменной $ PATH (которая используется для проверки команд в вашем распоряжении)
источник
Вы используете неверную версию установщика, например, 64-разрядную машину и пытаетесь установить 32-разрядную версию установщика.
источник