回答:
CPUが64ビット、32ビット、または両方に対応しているかどうかは、のflags行をチェックすることで確認でき/proc/cpuinfoます。アーキテクチャファミリで考えられるフラグを知る必要があります。たとえば、i386 / amd64プラットフォームでは、lmフラグはamd64対応のCPUを識別します(そのフラグを持たないCPUはi386のみです)。
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
を使用してアーキテクチャを照会すると、カーネルが32ビットか64ビットかを確認できますuname -m。たとえば、i[3456]8632ビットx86_64で64ビットです。いくつかのアーキテクチャでは、64ビットカーネルが32ビットユーザーランドプログラムを実行できるためuname -m、64ビットカーネルが表示されていても、64ビットライブラリが利用できる保証はありません。
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
またuname -m、「仮想化された」値を返す場合があることに注意してください。たとえば、Linuxでは、setarch i386 bashamd64システムで実行しuname -m、そのbashから実行すると、uname -mレポートが表示されますi386。これにより、たとえば、クロスコンパイルを設定せずに32ビットプログラムをコンパイルするなど、カーネルが64ビットであるにもかかわらず、「32ビットシステム」にいるふりをすることができます。
コマンドでLSBサポートを照会することにより、ユーザーランドで利用可能なものを確認できますlsb_release。より正確には、サポートされているLSB機能の区切りリストをlsb_release -s出力し:ます。各機能にはの形式があります。たとえば、ix86 Cライブラリの可用性はで示されますが、amd64の類似物です。ただし、すべてのディストリビューションが使用可能なすべてのLSBモジュールを宣言しているわけではないため、この方法で検出可能な数より多くのディストリビューションが使用できる場合があります。module-version-architecturecore-2.0-ia32core-2.0-amd64
開発用に推奨されるワードサイズを調べるには(Cコンパイラが利用可能な場合)、印刷sizeof(void*)またはを出力する5行のCプログラムをコンパイルしsizeof(size_t)ます。
getconf WORD_BITかgetconf LONG_BIT(それはあるものの、些細な、およびポータブル)独自のCプログラムをコンパイルするのではなく。
getconfここで使用することを考えていませんでした。原理的にはいいように聞こえますが、複数のC ++コンパイラが存在する場合(通常はgcc / iccなど、Linuxではgcc / native cc)、使用する特定のCコンパイラに結果を適用するのは困難です。標準システムでgetconfは、c89またはc99に適用する必要があります$(getconf PATH)が、実際にはcc、ベンダーc89ラッパーによって実行される代替をインストールする人がいるかもしれません。
.正規表現に欠落があります:grep '^flags.*:.*\blm\b' /proc/cpuinfo。またそれだけでなくて私の作品-q旗
.。「ゼロ以上のスペース」がありましたが、実際にはタブがあります。タブも許可するように正規表現を変更しました。-qフラグ、そこには出力ませんが、コマンドの終了ステータスは、フラグが存在するかどうかを示します。出力する場合は、-qフラグを削除します。
-q旗について知らなかった。Ty、今すぐ動作します:)
あなたは使用することができるuname -aためと見てx86_64、あなたが64ビットを実行しているかどうかを確認します。それ以外は(私の知る限りでは)、あなたは、32ビットを実行しているか、などの非PCのハードウェア上にあるalpha、sparcまたは、ppc64。
alpha、sparc64、ppc64、...
タイプ:
uname -a
あなたが取得する場合 x86_64 GNU/Linux、64ビットカーネルを実行しています。あなたが似たようなものを手に入れたらi386/i486/i586/i686、おそらく32ビットカーネルを実行しています
getconfは、使用するシステムコールを最も少なくします。
$ strace getconf LONG_BIT | wc -l
253
$ strace arch | wc -l
280
$ strace uname -m | wc -l
281
$ strace grep -q lm /proc/cpuinfo | wc -l
301