Linux
 Computer >> コンピューター >  >> トラブルシューティング >> Linux

Ubuntu で「バイナリ ファイルを実行できません:実行形式エラー」を解決するためのクイック ガイド

公式の apt-get リポジトリを使用している場合にはこのようなことは起こらないはずですが、インターネットからソフトウェアをダウンロードして実行すると、 恐ろしいbash:./nameOfProgram:バイナリ ファイルを実行できません:Exec フォーマット エラーが表示される可能性があります。 。このエラーは、通常、bash:./nameOfProgram.sh:許可が拒否されましたというエラーが続きます。 またはそれに類するものは、ダウンロードしたバイナリと Ubuntu が正しく接続できなかったことを示します。これは、一見有効な Linux バイナリですが、カーネルが現在サポートしているチップセットとは異なるチップセット用に設計されているためです。

Ubuntu を使用しているほとんどの人は、実際にマイクロチップを製造した人に関係なく、Intel がリリースした標準アーキテクチャに基づいた 32 ビットまたは 64 ビットのプロセッサを使用しています。 64 ビット プロセッサは 32 ビット モードで実行できることを覚えておくことが重要です。そのため、64 ビット プロセッサを使用しているにもかかわらずこのエラーが発生する場合は、32 ビット バージョンの Ubuntu を実行している可能性があります。いくつかの簡単なコマンドを実行するだけで、チップがどのように動作しているかを知ることができます。

方法 1:Arch コマンドを使用する

マシンにインストールされているマイクロプロセッサの種類がよくわからない場合は、まずコマンド ラインから Arch コマンドを使用します。このコマンドを実行すると、1 行の出力のみが返されます。多くの場合、i686 と表示されます。これは、32 ビット プロセッサを使用しているため、x86_64 バイナリを実行できないことを意味します。代わりに amd64 またはそれに類似したものが表示される場合は、x86_64 プロセッサーを使用しており、少なくとも理論的にはほとんどの 32 ビットおよび 64 ビットのバイナリを実行できるはずです。 Microsoft Windows とは異なり、Ubuntu Linux には実際には、644 ビット チップセットのユーザーが多くの場合、オペレーティング システムで 16 ビット Windows プログラムを実行できるようにする適切なツールが含まれています。

これらの用語は、実際に特定のモデルのマイクロチップを使用していない場合でも当てはまります。たとえば、i686 は、実際には Intel 80686 チップではない場合でも、Linux では多くの 32 ビット プロセッサを指します。 64 ビット Intel テクノロジを使用している場合でも、arch はプロセッサを amd64 チップと呼ぶ場合があります。これはエラーを示すものではないため、無視しても問題ありません。 cat /proc/cpuinfo を使用できます。 以上 /proc/cpuinfo 使用しているプロセッサの正確な種類を確認します。このファイルの行は長いため、グラフィカル ターミナル ウィンドウを使用している場合は、ファイルを発行する前に F11 キーを押すとよいでしょう。仮想コンソールのユーザー、特に Ubuntu サーバーを使用しているユーザーは、それほど心配する必要はありません。

他のタイプの出力が表示される場合があります。これにより、ソフトウェアを実行する際のオプションがさらに制限される可能性があります。 Ubuntu は、PowerPC アーキテクチャを最も長い間サポートしていました。これは、一部のワークステーションだけでなく、多くの Classic Macintosh や古い OS X Macintosh マシンにも搭載されています。現在、これらのアーキテクチャの Ubuntu リポジトリはまだほとんどサポートされていませんが、実際にはまだ見つけることができます。ただし、この場合、公式リポジトリ以外のインターネットからダウンロードした Linux バイナリの多くは実行できない可能性が高くなります。これは、Ubuntu がこれらのマシンで動作しないという意味ではありませんが、より軽量な Lubuntu ディストリビューションを検討することをお勧めします。

方法 2:file コマンドを使用する

file コマンドはさまざまなファイルに何が含まれているかを識別し、通常は非常に正確です。 file nameOfProgram と入力して、問題のファイルを特定してみてください。 出力として ELF 32 ビットまたは ELF 64 ビットのどちらが得られるかを確認します。これが ELF 64 ビット バイナリであり、arch コマンドの出力として i686 を受け取った場合、それを自分のマシンで合理的に実行することはできません。 32 ビット Ubuntu を実行している 64 ビット マイクロプロセッサを使用している場合、技術的にはオペレーティング システムを再インストールできますが、これは単一のプログラムを実行するためには少し極端な手順です。

また、たとえマルウェア スキャンを実行していても、実行しようとするとジャンク文字をターミナルに吐き出すバイナリに遭遇する可能性が、わずかではありますが、非常に現実的です。これらの文字は通常、菱形のブロック、または数値が入った長方形の立方体の形をとります。一部のコンピューター科学者は後者を豆腐と呼び、現在インストールされている書体では表示できない文字の Unicode 値を表します。端末にこのように表示されている場合は、これはフォント エラーでも、マルウェアに関係するものでもありませんので、ご安心ください。むしろ、これは単純に、バイナリ内のコンパイル済みマイクロプロセッサ オペコードがシステムにとって異質であり、コードの一部を解釈する方法がわからないためです。

これを修正する最善の方法は、アーキテクチャに適したパッケージをインストールすることです。 Ubuntu 内からパッケージをインストールしている場合は、apt-get システムまたはグラフィカル Synaptic マネージャーが問題なく対応します。別のディストリビューションからパッケージをダウンロードする場合は、アーキテクチャに適したものを見つける必要があります。たとえば、Arch Linux の gvim パッケージのリストを見てみましょう。デフォルトのパッケージは x86_64 アーキテクチャを特徴としていますが、i686 チップセット用のパッケージもあります。これは、Intel 割り込み構造で動作する 32 ビット マシンで動作しますが、Linux がサポートする他のチップセットは実際に独自の 32 ビット実装を備えているため、i686 と 32 ビットという用語が常に相互に包含されるわけではないことに注意してください。

GNU/Linux シーン全体を探索しているユーザーは、これらよりもはるかに珍しいテクノロジ用にコンパイルされたバイナリに遭遇する可能性があります。 Linux は真のクロスプラットフォーム コード シーンであるため、OpenRISC、MIPS、SPARC、M32R、MN103、ARM、ARC、Alpha およびその他の多くの標準バイナリが動作するようにコンパイルされていることがわかります。 ARM は非常に人気のあるタブレットおよびスマートフォンのプラットフォームですが、これらのいずれも実行できない可能性が高くなります。これは、Raspberry Pi のベースとなるプラットフォームでもあります。つまり、実際にモバイル デバイスで Ubuntu を実行している場合、または Raspberry Pi 用の Ubuntu MATE ディストリビューションを実行している場合、実際には、Intel 32 ビットまたは x86_64 バイナリの代わりにこれらが必要になります。

著者について

Ubuntu で「バイナリ ファイルを実行できません:実行形式エラー」を解決するためのクイック ガイド

ケビン・アロウズ

Kevin Arrows は、10 年以上の業界経験を持つ、経験と知識が豊富なテクノロジー スペシャリストです。彼は Microsoft Certified Technology Specialist (MCTS) 認定を取得しており、最新の技術開発について常に最新の情報を入手することに深い情熱を持っています。 Kevin は、ソフトウェア開発、サイバーセキュリティ、クラウド コンピューティングなどの分野での専門知識と専門知識を示し、テクノロジー関連の幅広いトピックについて幅広く執筆しています。テクノロジー分野への彼の貢献は同僚から広く認められ、尊敬されており、複雑な技術概念を明確かつ簡潔に説明する能力が高く評価されています。


  1. 修正:sudoersファイルにありません。この事件は報告されます。

    おそらく、初心者向けの恐ろしいUnixおよびLinuxの警告メッセージの1つは、「____はsudoersファイルにありません。この事件は報告されます。」実際のエラーメッセージの場合、下線はユーザー名に置き換えられ、誰かがあなたの間違いについて聞いているように聞こえます! ただし、あまり心配する必要はありません。報告されているインシデントに関するメッセージは、システムログに記録されるというメモにすぎません。このログは、ある時点で、システム管理者が悪用の可能性を確認する必要がありました。シングルユーザーシステムを使用している場合は、次の手順を使用してこの一般的な問題を修正する以外に、心配する必

  2. Linux用のWindowsサブシステムで「gedit」エラーを修正するにはどうすればよいですか?

    Windows Subsystem for Linux(WSL)は、Windows10またはWindowsServer 2009上のLinuxにネイティブなバイナリ実行可能ファイルを実行するために使用される互換性レイヤーです。これは、Windows101603バージョン以降の64ビットアーキテクチャでのみ使用できます。また、Windows Server 2019のサポートも提供します。以前のバージョンのレイヤーでは、Ubuntuイメージのみが使用可能でしたが、SUSEイメージも導入されていませんでした。 この機能は多くのユーザーによって使用されており、ソフトウェア開発コミュニティの間で非常