web-dev-qa-db-ja.com

ビット数(32または64)を返すLinuxコマンド?

プロセッサが32ビットプロセッサか64ビットプロセッサかを示すためにプログラムで32または64を返すために実行できるLinuxコマンドとは何ですか?

13
WilliamKF
  • [〜#〜] 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ビットを実行しているか、alphasparcppc64などの非PCハードウェアを使用している。

3
Wuffers

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
2
Rachel Duncan
uname -m | sed 's/x86_//;s/i[3-6]86/32/'
2
WilliamKF

タイプ:

uname -a

x86_64 GNU/Linuxを取得した場合は、64ビットカーネルを実行しています。 i386/i486/i586/i686に似たものを取得した場合は、おそらく32ビットカーネルを実行しています。

1