バイナリ (Binary)とは?

カテゴリ: 基本概念

バイナリ(Binary)は、文字通りには「二進数(0と1)」を意味しますが、IT用語としては「コンピュータが直接解釈・実行できる形式のデータやファイル」を指します。人間が読み書きできる「テキストファイル(ソースコードなど)」と対比して使われます。

LinuxにおけるバイナリとELF

Windowsの実行ファイルが `.exe` 形式であるのに対し、Linuxでは主に **ELF (Executable and Linkable Format)** という形式が採用されています。`/bin` や `/usr/bin` にある `ls`、`cp`、`mv` などのコマンドはすべて、このELF形式のバイナリファイルです。

バイナリファイルには、CPUが実行する機械語命令だけでなく、実行に必要なライブラリの情報やメモリ配置に関するヘッダー情報も含まれています。

ソースコードからバイナリへ

C言語やGo言語などで書かれたプログラムは、コンパイラ(gccなど)を通してバイナリに変換されます。これを「コンパイル」と呼びます。

  • ソースコード: `printf("Hello");` (人間が読める)
  • コンパイル: 翻訳作業
  • バイナリ: `7f 45 4c 46 ...` (機械だけがわかる)

最新トレンドとAIの関連性

WebAssembly (Wasm) バイナリ

最近のトレンドとして注目されているのが **WebAssembly (Wasm)** です。これはブラウザだけでなく、サーバーサイドやエッジ環境でも動作する「ポータブルなバイナリ形式」です。Linux環境でも、Dockerの代替や補完としてWasmランタイム(WasmEdgeなど)が普及し始めています。従来のバイナリが特定のCPUアーキテクチャ(x86_64など)に依存するのに対し、Wasmバイナリはどこでも動く(Write Once, Run Anywhere)を実現しつつあります。

AIモデルとバイナリ

AIの文脈では、学習済みのモデル(weights)も一種の巨大なバイナリデータです。最近では、AIモデルを軽量化するために「量子化(Quantization)」を行い、32ビット浮動小数点のデータを8ビットや4ビットの整数バイナリに変換する技術が一般的です。これにより、スマホやRaspberry Piのようなリソースの限られたLinuxデバイスでも高度なAIが動作するようになっています。

よくあるトラブル:Exec format error

Linux初心者がよく遭遇するエラーに `Exec format error` があります。

これは、「このOSやCPU向けではないバイナリを実行しようとした」時に発生します。例えば、Raspberry Pi(ARMアーキテクチャ)で作成したバイナリを、普通のPC(x86_64アーキテクチャ)にコピーして実行しようとすると、このエラーが出ます。バイナリは「特定の環境専用」であることが一般的だからです。これを解決するのがクロスコンパイル技術や、前述のWebAssemblyです。

バイナリを調査するコマンド

Linuxにはバイナリファイルの中身を調査するための強力なコマンドがあります。

  • `file `: ファイルの種類(32bit/64bit, アーキテクチャなど)を表示。
  • `ldd `: バイナリが必要とする共有ライブラリを表示。
  • `strings `: バイナリの中に含まれる「読める文字列」だけを抽出して表示。隠し機能やメッセージを探すのによく使われます。