回答:
i386とi686は両方とも32ビットです。
x86_64は64ビットです
64ビットの例:
behrooz@behrooz:~$ uname -a
Linux behrooz 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux
編集:私のLinux ARM 32または64ビットを
参照してください?ARM用
uname -m
。それはアーキテクチャのみを示します。
それは簡単です!arch
コマンドを使用します。
arch
戻りますがi386
、がuname -a
表示されますx86_64
。
@behroozは正しいです。残念ながらuname
、アーキテクチャを知る必要があります。実際、アーキテクチャのリストを探していましたが、あなたの質問に答えるこの記事を見つけました。に関してuname -m
:
x86_64 GNU / Linuxは、64ビットLinuxカーネルが実行されていることを示します。i386 / i486 / i586 / i686を使用する場合は、32ビットカーネルです。
ハードウェアが64ビットカーネルを実行できるかどうかを判断するには
grep flags /proc/cpuinfo
出力で次を探します(同じ質問に対するこのstackoverflow回答から取得されたすべてのフラグ)
lm
フラグはロングモードCPU-64ビットCPUを意味しますtm
フラグは保護モードを意味します-32ビットCPUrm
フラグはリアルモード-16ビットCPUを意味します(編集:この答えは間違っています。@ Lizardxのコメントのおかげで)
Bashでは、整数オーバーフローを使用します。
if ((1<<32)); then
echo 64bits
else
echo 32bits
fi
別のプロセスを呼び出したり、ファイルを開いたりするよりもはるかに効率的です。
((
はBashismであり、POSIX mywiki.wooledge.org/Bashism#Conditionalsで
((1<<32)-1)
以下のためのDebian:
私のPCで
〜> dpkg --print-architecture amd64
〜> dpkg --print-foreign-architectures i386
私のラズベリーパイ2
〜> dpkg --print-architecture armhf
checkinstall
、thx!で使用するパッケージアーキテクチャを決定するときに最適に機能します。
Formakeプロジェクトのsyscapを使用
syscapを使用すると、多くのシステムプロパティをプローブし、依存関係をテストできます。移植性のあるシェルスクリプトです。
CPUアーキテクチャを取得します。
syscap info -arch
カーネル名とバージョンを取得します。
syscap info -kernel -kernver
別の方法は、システムファイルがコンパイルされたアーキテクチャをチェックすることです
$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
あなたがシンプルなワンライナーを探しているなら、これは64または32を返す私が見つけた最も信頼できるソリューションです。ARMを実行しているかどうかは関係なく、bashまたはshを使用するすべてのシステムで動作するはずです。
注意してください、これはシステムが32ビットまたは64ビットのいずれかであると仮定します。8-、16、またはその他のビットアーキテクチャを検出する必要がある場合は、以下の説明を参照してください。
[$((0xffffffff))-eq -1] && echo 32 || エコー64
ここで何が起きているのですか?
ロジックは非常にシンプルで、すべてがコンピューターが符号付き整数を格納する方法に要約されます。32ビットアーキテクチャには符号付き整数の保存に使用できる32ビットしかありませんが、64ビットアーキテクチャには64ビットがあります!つまり、格納できる整数のセットは有限です。このセットの半分は負の数を表し、半分は正の数を表します。-1に等しい符号付き整数は、そのアーキテクチャの特定のビット数に格納できる最大数として表されます。32ビットシステムでは、-1は16進値0xFFFFFFFF(32バイナリビット、すべて1)で表すことができます。64ビットシステムでは、0xFFFFFFFFはベース10の4,294,967,295に変換されますが、0xFFFFFFFFFFFFFFFFは-1の表現です。0xFFと0xFFFFで-1に等しい8または16ビットのシステムでも、これがどのように簡単にスケーリングするかを見ることができます。
uname -m
とuname -m
?