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


13

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


1
@Sathya:たとえLinuxがそうでなくてもプロセッサーは64ビットである可能性があるので、それはまったく重複していません。
ジル「SO-悪であるのをやめる」

回答:


13
  • 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)ます。


3
(彼らはそれを持っている場合など)、GNUシステムでは、あなたが行うことができる必要がありますgetconf WORD_BITgetconf LONG_BIT(それはあるものの、些細な、およびポータブル)独自のCプログラムをコンパイルするのではなく。
追って通知があるまで一時停止します。

@Dennis:訂正してくれてありがとう。私はgetconfここで使用することを考えていませんでした。原理的にはいいように聞こえますが、複数のC ++コンパイラが存在する場合(通常はgcc / iccなど、Linuxではgcc / native cc)、使用する特定のCコンパイラに結果を適用するのは困難です。標準システムでgetconfは、c89またはc99に適用する必要があります$(getconf PATH)が、実際にはcc、ベンダーc89ラッパーによって実行される代替をインストールする人がいるかもしれません。
ジル「SO-悪であるのをやめる」

.正規表現に欠落があります:grep '^flags.*:.*\blm\b' /proc/cpuinfo。またそれだけでなくて私の作品-q
BYF-ferdy

@ byf-ferdy行方不明ではありませんでした.。「ゼロ以上のスペース」がありましたが、実際にはタブがあります。タブも許可するように正規表現を変更しました。-qフラグ、そこには出力ませんが、コマンドの終了ステータスは、フラグが存在するかどうかを示します。出力する場合は、-qフラグを削除します。
ジル 'SO-悪であるのをやめる' 14

@Gillesああ、私は-q旗について知らなかった。Ty、今すぐ動作します:)
byf-ferdy 14

3

あなたは使用することができるuname -aためと見てx86_64、あなたが64ビットを実行しているかどうかを確認します。それ以外は(私の知る限りでは)、あなたは、32ビットを実行しているか、などの非PCのハードウェア上にあるalphasparcまたは、ppc64


3
他に何かは、あなたがPC以外のハードウェア(のような32ビットを実行している、またはしているとalphasparc64ppc64、...
ジル「SO-停止されて悪」

@Gilles:ありがとう、それに応じて回答を編集しました。
ワッファー


1

タイプ:

uname -a

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


1
それは問題ではありません。
harrymc

1

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.