プロセッサが32ビットプロセッサか64ビットプロセッサかを示すためにプログラムで32または64を返すために実行できるLinuxコマンドとは何ですか?
[〜#〜] cpu [〜#〜]が64ビット、32ビット、またはその両方に対応しているかどうかを確認するには、 _/proc/cpuinfo
_のflags
行。アーキテクチャファミリで可能なフラグを知っている必要があります。たとえば、i386/AMD64プラットフォームでは、lm
フラグはAMD64対応のCPUを識別します(そのフラグがないCPUはi386のみです)。
_grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
_
_uname -m
_を使用してアーキテクチャにクエリを実行すると、カーネルが32ビットか64ビットかを確認できます。たとえば、_i[3456]86
_は32ビットですが、_x86_64
_は64ビットです。いくつかのアーキテクチャでは、64ビットカーネルが32ビットユーザーランドプログラムを実行できるため、_uname -m
_が64ビットカーネルを示している場合でも、64ビットライブラリが使用可能であるという保証はありません。
_[ "$(uname -m)" = "x86_64" ] # Assuming a PC
_
_uname -m
_が「仮想化」値を返す場合があることにも注意してください。たとえば、Linuxでは、AMD64システムで_setarch i386 bash
_を実行し、そのbashから_uname -m
_を実行すると、_uname -m
_レポート_i386
_が表示されます。これにより、カーネルが64ビットシステムであっても「32ビットシステム」を使用しているように見せかけることができます。たとえば、クロスコンパイルを設定せずに32ビットプログラムをコンパイルできます。
_lsb_release
_ コマンドを使用して [〜#〜] lsb [〜#〜] サポートにクエリを実行すると、ユーザーランドで利用できるものを確認できます。より正確には、_lsb_release -s
_は、サポートされているLSB機能の_:
_で区切られたリストを出力します。各機能の形式は_module-version-architecture
_です。たとえば、ix86 Cライブラリの可用性は_core-2.0-ia32
_で示されますが、_core-2.0-AMD64
_はAMD64のアナログです。ただし、すべてのディストリビューションが使用可能なすべてのLSBモジュールを宣言しているわけではないため、この方法で検出できるよりも多くのモジュールが使用できる場合があります。
sizeof(void*)
またはsizeof(size_t)
を出力する5行のCプログラムをコンパイルすることにより、開発に適したワードサイズを見つけることができます(Cコンパイラーが使用可能であると想定)。
uname -a
を使用してx86_64
を探し、64ビットを実行しているかどうかを確認できます。それ以外のもの(私が知る限り)で、32ビットを実行しているか、alpha
、sparc
、ppc64
などの非PCハードウェアを使用している。
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
uname -m | sed 's/x86_//;s/i[3-6]86/32/'
タイプ:
uname -a
x86_64 GNU/Linux
を取得した場合は、64ビットカーネルを実行しています。 i386/i486/i586/i686
に似たものを取得した場合は、おそらく32ビットカーネルを実行しています。