x64命令セット(x86_64またはamd64とも呼ばれます)をサポートするすべてのプロセッサは、x86命令セット(i386またはi686とも呼ばれ、厳密には特定のバージョンのx86です)もサポートします。SPARC64とSPARCのARM A64(ARMv8に登場する新しい64ビット命令セット)とA32(「クラシック」32ビット命令セットの名前)についても同じことが言えます。私はMIPS64とMIPSを信じています。したがって、これらすべてのアーキテクチャファミリでは、プロセッサが64ビットコードを実行できる場合、32ビットコードも実行できます。
Linuxカーネルは、64ビットカーネルでの32ビットユーザーランドコードの実行をサポートします(上記のすべてのアーキテクチャファミリーで)。カーネルは同種(すべて64ビットまたはすべて32ビット)である必要があり、各プロセスは同種である必要がありますが、64ビットカーネルで32ビットと64ビットのプロセスを混在させることができます。逆は不可能です。32ビットのカーネルでは、64ビットのプロセスを実行できません。
これは、64ビットインストールで既存の32ビットバイナリを実行したいという欲求に動機づけられたLinuxの設計上の選択です。他のUnixバリアントは異なる選択をしました:Solarisは32ビットカーネルで64ビットプログラムを実行でき、その逆も可能ですが、OpenBSDは64ビットカーネルで32ビットプログラムを実行できません。
あなたは得ることができますCPUの情報では/proc/cpuinfo。x86 CPUにlmフラグがある場合、それは64ビットCPUです。
デフォルトでは、uname -mまたはarchカーネルがコンパイルされたアーキテクチャを示します。Linuxは、プロセスpersonalityコールの「パーソナリティ」をシステムコールで設定できます。setarchコマンドを使用して、別のパーソナリティでサブプロセスを実行できます。setarch i686 someprogramまたはlinux32 someprogramがuname -m戻る環境で指定されたプログラムを実行するi686一方、setarch amd64 someprogramまたはlinux64 someprogramが戻る環境で指定されたプログラムを実行しuname -mますamd64。
file /sbin/initinitプログラムがどのアーキテクチャ用にコンパイルされているかを示します。インストール内で32ビットと64ビットの実行可能ファイルを混在させることは可能ですが、通常、すべてのコアOSプログラムは同じアーキテクチャのものです。管理がはるかに簡単だからです。
$HOSTYPEbash変数であり、bashプログラムがコンパイルされたアーキテクチャを示します。
getconf LONG_BITデフォルトのCコンパイラが32ビットまたは64ビットのプログラムをコンパイルするように設定されているかどうかを通知します。より正確なテストは、をコンパイルして実行するプログラムです。印刷sizeof(void*)またはsizeof(size_t)—呼び出しでは、デフォルトコンパイラであると考えgetconfられるものに関する情報のみを提供できgetconfます。