web-dev-qa-db-ja.com

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

SSHを使ってログインしたときに確認できるのはこれだけです...

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

ここでは何もできませんでした。 haltpoweroffrebootなどのコマンドはcommand not foundを返します。

どうすればこれを修正できますか?私はDebian Squeeze Linuxを使っています

76
superuser

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

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

/usr/bin/idは上書きされたのでしょうか。

80
LawrenceC

Sh executablefilenameではなく./executablefilenameを使用して実行してください。結局、それはシェルスクリプトではありません。

24
RidDeBakTiYar

問題は、異なるプロセッサアーキテクチャ用のバイナリを実行していることです。 (binutilsからの)objdumpを使ってバイナリのアーキテクチャをチェックすることができます。あなたはマシンのアーキテクチャをチェックするために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

これらのツールを使って、マシンやバイナリのアーキテクチャをチェックすることができます - Intelアーキテクチャだけでなくあらゆるプロセッサも。

Mac OSXユーザーの場合、 "file"コマンドを使って特定のファイルのアーキテクチャ情報を調べることができます。

$ file filename_here
9
gaoithe

私はここでいくつかのワイルドな推測をしています、しかしそれは以下が起こっているように見えます:

  1. あなたはSSH経由でログインし、~/.profileを実行するためのbashまたはあなたのための環境をセットアップするための~/.bashrcを起動します(これは正常です)。
  2. ある時点で、あなたのuidを取得するために/bin/idを実行しようとしますが、それは失敗し、整数式エラーを引き起こし、$PATHを設定する前にスクリプトを終了させます。
  3. $PATHが設定されていないので、bashはフルパスを指定してコマンドを実行することしかできません。

/ bin/idの失敗の根本的な原因を解決できるまで、export PATH=/bin:/usr/bin:/sbin:/usr/sbinを使用して$PATHの問題を解決してください。

5
Darth Android

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

0
acoh Facha

これはあなたがbashスクリプトを使ってバイナリファイルを実行しようとしていることを意味します。それはすでにバイナリファイルであり、あなたはそれを解析して実行するためにあなたの$ Shellを試みています。

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

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

同様に、あなたは同じメソッドを打っているかもしれませんし、それがあなたのコードスニペットから見ているように。

一方、残りのコマンドでは、これらの停止、シャットダウン、再起動などのコマンドはrootが所有するコマンドであり、必要な操作を実行して実行するにはスーパーユーザーの権限が必要です。通常のユーザーはそれらを実行することはできません。これらのコマンドは/ sbin /および/ usr/sbinに配置されており、$ PATH変数には含まれていない可能性があります(管理用のコマンドの検証に使用)

0
Nasir Mahmood