通常、このエラー メッセージは、Linux がファイルをシェル スクリプトまたは実行可能ファイルとして認識していないことを意味します。
通常、原因は間違ったアーキテクチャで実行可能ファイルを実行していることです。ARM CPU で x86 実行可能ファイルを実行しようとすると、このメッセージが表示されます。
/usr/bin/id
しました 上書きされますか?
sh executablefilename を使用する代わりに、./executablefilename を使用して実行してみてください。結局のところ、これはシェル スクリプトではありません。
問題は、異なるプロセッサ アーキテクチャのバイナリを実行することです。バイナリのアーキテクチャを確認するには、(binutils からの) objdump を使用できます。マシンのアーキテクチャを確認するには、uname を使用できます。
例えばクロム用のFirefoxプラグインであるFF.Communicatorをインストールするときに、「バイナリファイルを実行できません」というエラーが発生しました(これにより、Javaアプレットを使用するページを実行できます)。
- objdump バイナリが 64 ビット elf64-x86-64 であることを示します
-
うなめ 私のマシンが 32 ビット i686 であることを示しています
$ ./FF.Communicatorbash:./FF.Communicator:バイナリ ファイルを実行できません$ uname -mpioi686 i686 i386 GNU/Linux$ objdump -a ./FF.Communicator./FF.Communicator:ファイル形式 elf64-x86-64./ FF.コミュニケーター
-
objdump 私のマシンで動作しているバイナリでは、それが 32 ビット elf32-i386 であることを示しています
$ objdump -a /bin/ls/bin/ls:ファイル形式 elf32-i386
これらのツールを使用すると、Intel アーキテクチャだけでなく、あらゆるプロセッサのマシンとバイナリのアーキテクチャをチェックできます。
Mac OSX ユーザーの場合、「file」コマンドを使用して特定のファイルのアーキテクチャ情報を確認できます:
$ file filename_here