テクノロジー · 実用ガイド
Linux の「cannot execute binary file: Exec format error」—ファイル、プラットフォーム、インタープリター境界を証明する
正確なバイト列を保存してファイル種別を分類し、ホストとのマシン形式比較と宣言されたインタープリター確認を行ってから、再ビルドや権限変更を判断します。

「Exec format error」は形式分類の失敗であり、実行ビットの誤りを証明しません。変更前に、正確なコマンド、パス、作業ディレクトリ、シェル、ホストのアーキテクチャ、ファイルの SHA-256 を保存します。次に、対象がスクリプト、ELF 実行ファイル、オブジェクト、アーカイブ、またはバイナリ名で保存されたエラーページなのかを読み取り専用で分類します。
この手順はホストシェルからの直接実行だけを対象にします。systemd ユニットや Docker のビルド/エントリーポイントで失敗した場合は、同じ証拠を保存して専用ガイドへ移ってください。サービス管理とコンテナでは、実際のパス、プラットフォーム、インタープリター境界が異なります。
一回の失敗を固定し、正確なバイト列を特定する
コマンド、終了状態、絶対パス、作業ディレクトリ、シェル、uname -s、uname -m、対象の sha256sum を記録します。シンボリックリンクは置換せずに解決し、ラッパーが別パスを選んでいないか確認します。
その正確なパスに file を実行して全出力を保存します。HTML、JSON、テキスト、アーカイブ、再配置可能オブジェクト、データなら、権限変更より先にダウンロードまたはビルド出力を調査します。
スクリプトと ELF バイナリを分ける
スクリプトは先頭行の生バイトだけを確認し、#!、絶対インタープリターパス、復帰文字や BOM がカーネルの見るパスを変えていないかを調べます。最初から全体を書き換えず、インタープリターを別に読み取り専用で確認します。
ELF では readelf -h を実行し、Class、Data、Type、Machine を対象ホストと比較します。ここでの不一致は chmod ではなく、生成ビルドまたは配布物選択の問題です。
ELF インタープリター境界を証明する
ELF ヘッダーが一致したら readelf -l で要求されたプログラムインタープリターを調べ、正確なパスと、ホストに期待するローダーがあることを確認します。CPU ラベルの一致だけでは ABI とローダーの存在を証明しません。
名前が似たランダムなファイルをコピーしてローダーを「修復」しないでください。対応 ABI 向けの成果物を選ぶか、管理されたパッケージ手順で文書化されたランタイムを導入します。
症状ではなく生成境界を修復する
OS またはマシン違いは正しい対象を選択・再ビルドし、ELF 種別違いはオブジェクトやライブラリではなく実行ファイルを公開します。テキストなら取得、認証、リダイレクト、梱包を直し、壊れたスクリプトヘッダーはその境界だけを修正・レビューします。
インシデント記録には元のハッシュと置換後のハッシュを残します。ビルド、配備、更新処理がそのパスを生成するなら、悪いバイト列が再出現しないよう生成側を直します。
同じ呼び出しを繰り返して完了条件を定める
同じ対象ホストと作業ディレクトリで同じコマンドを実行し、置換後ハッシュ、分類、ELF または shebang の証拠、終了状態、小さな期待動作を記録します。
対象で実行が成功し、以前の不一致をすべて説明できた時だけ閉じます。systemd や Docker が文脈を与えた場合は証拠を専用手順へ渡し、異なる実行境界を混ぜません。
