「バイナリファイルを実行できません」というエラーを解決するにはどうすればよいですか?


80

SSHを使用してログインすると、表示されるのはこれだけです...

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

ここでは何もできませんでした。以下のようなコマンドはhaltpoweroffreboot返されますcommand not found

どうすれば修正できますか?Debian Squeeze Linuxを使用しています


7
そのマシンに何をしましたか?
slhck

1
最後にしたことは、ログウォッチのインストールでした。他に何もありません。
スーパーユーザー

3
PATHは、シェルがプログラムを検索するフォルダーのリストを含む環境変数です。lsたとえば、通常はを参照し/bin/ls、シェルはそれが見つかるPATHまで1つずつリストされているフォルダーを検索することでそれを見つけます。私はより良い出発点になると思う、の出力はecho $PATH何ですか?(編集:exportコマンドは、bashで環境変数を定義する方法です。)
ダースAndroid

1
ああ...システムをシャットダウンしないように警告しました:Pコンソールにアクセスできますか(物理モニター+キーボードが接続されています)?システムをシングルユーザーモードで起動して(リカバリモードとラベル付けされる場合があります)、ルートシェルにアクセスできるかどうかを確認してください。
ダースアンドロイド

2
@Davidと入力すると、出力は表示されませんexport PATH=/bin:/user/bin:/sbin:/usr/sbin。これはサイレントコマンドです。
ベンリチャーズ

回答:


84

通常、このエラーメッセージは、Linuxがファイルをシェルスクリプトまたは実行可能ファイルとして認識しないことを意味します。

通常、原因は間違ったアーキテクチャで実行可能ファイルを実行していることです。ARMCPUでx86実行可能ファイルを実行しようとすると、このメッセージが表示されます。

/usr/bin/idおそらく上書きされましたか?


15
「ARM CPUでx86実行可能ファイルを実行しようとすると、このメッセージが表示されます。」それがまさにその原因です。ご意見ありがとうございます!
スーパーユーザー

私のバイナリはWindows exeファイルであることが判明しました:P
forzagreen

どうすればこれを解決できますか?私は同じ問題を
受け取っていると確信

解決するには、x86バイナリではなくARMバイナリを使用する必要があります。ソースが利用可能な場合は、ARMシステムで再コンパイル/再構築できます。ソースが利用できない場合は、ARMバイナリについてベンダーに確認してください。たとえば、Sunの公式JREには、x86と「組み込み」またはARMバージョンの両方があります。ARMバージョンを使用する必要があります。
ローレンス

24

sh実行可能ファイル名を使用する代わりに、。/ executablefilenameを使用して実行してみてください。結局のところ、これはシェルスクリプトではありません。


ラズベリーパイで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.Communicator

  • マシン上の作業バイナリの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を取得しようとしますが、失敗すると整数式エラーが発生し、スクリプトを終了してからを設定できます$PATH
  3. your $PATHが設定されていないため、bashは指定された絶対パスでのみコマンドを実行できます。

/ bin / idが失敗する根本的な原因を修正できるまでexport PATH=/bin:/usr/bin:/sbin:/usr/sbin$PATH問題の修正に使用します。


0

バイナリファイルは、プロセッサが理解できるマシン命令で構成されています。オペレーティングシステムは、同じ実行可能ファイルが実行されることを意味しません。互換性のあるプロセッサ命令セット間を前後に移動すると、通常はうまく機能します。互換性がない場合、CPUは命令を理解できません。


0

これは、bashスクリプトを使用してバイナリファイルを実行しようとしていることを意味します。既にバイナリファイルであり、$ SHELLを解析して実行しようとしています。

非常に単純な例では、次のような `w 'コマンドを実行しようとすると

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

同様に、同じメソッドを使用している場合や、コードスニペットから見えるようになっている場合があります。

一方、残りのコマンドについては、これらのhalt、shutdown、rebootなどのコマンドはルート所有のコマンドであり、必要な操作を実行および実行するにはスーパーユーザーの特権が必要です。通常のユーザーはそれらを実行することはできません別の説明は、これらのコマンドが/ sbin /および/ usr / sbinに配置されていることです。


-1

64ビットマシンなど、間違ったバージョンのインストーラーを実行していて、32ビットバージョンのインストーラーをインストールしようとしています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.