uname -a
と入力すると、次のような出力が得られます。
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux
与えられたOSが32または64ビットであることをどのようにして知ることができますか?
これはconfigure
スクリプトを書くときに便利です。
uname -m
を試してください。これはuname --machine
の略で、次のように出力されます。
x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
それ以外の場合、 Linuxカーネルではなく、CPU の場合は、次のように入力します。
cat /proc/cpuinfo
または
grep flags /proc/cpuinfo
"flags"パラメータの下に、さまざまな値が表示されます。「 / proc/cpuinfoのフラグはどういう意味ですか? "のうち、lm
name__:Long Mode
_(x86-64 :AMD64、 Intel 64、つまり64ビット対応としても知られる
lm ==> 64-bit processor
または lshw
NAME_ を使用する( below by Rolf of Saxony ))、Sudo
name__なし(cpuの幅を広げるため)):
lshw -class cpu|grep "^ width"|uniq|awk '{print $2}'
注:32ビットカーネルがインストールされた64ビットCPUを使用することができます 。
( ysdx が 彼/彼女自身の答え に書いているように)今日では、システムはmultiarchになることができるので、とにかく意味をなさない。あなたはコンパイラのデフォルトターゲットを見つけたいかもしれません ")
64ビットプラットフォームを実行している場合は、x86_64または uname -aの出力に非常に似たものが表示されます。
特定のマシンのハードウェア名を取得するには
uname -m
電話することもできます
getconf LONG_BIT
これは32か64を返します
lscpu
はあなたのCPUに関する他の情報の中からこれらをリストします:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
...
簡単に判断できるもう1つの便利なコマンドは次のとおりです。
コマンド:
getconf LONG_BIT
回答:
コマンド
$ Arch
と同等です
$ uname -m
しかしタイプするのに2倍速い
#include <stdio.h>
int main(void)
{
printf("%d\n", __WORDSIZE);
return 0;
}
私は特に Debian にソフトウェアを構築するためにこれについて疑問に思っていました(インストールされたDebianシステムは32ビットカーネル、ライブラリなどの32ビットバージョンでも、コンパイルされたもので64ビットバージョンでもかまいません32ビット互換モードではなく64ビット互換モード用です。
Debianパッケージ自体は、プラットフォームアーキテクチャを含むすべてのメタデータを使って実際にパッケージを作成するときに、自分がどんなアーキテクチャなのかを知る必要があります。そのため、他のパッケージツールや使用するスクリプトに出力するパッケージツールがあります。 dpkg-architecture 。それは現在のホストと同様にそれが構築するためにそれが構成するものの両方を含みます。 (通常、これらは同じです。)64ビットマシンでの出力例
DEB_BUILD_Arch=AMD64
DEB_BUILD_Arch_OS=linux
DEB_BUILD_Arch_CPU=AMD64
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_Host_Arch=AMD64
DEB_Host_Arch_OS=linux
DEB_Host_Arch_CPU=AMD64
DEB_Host_GNU_CPU=x86_64
DEB_Host_GNU_SYSTEM=linux-gnu
DEB_Host_GNU_TYPE=x86_64-linux-gnu
dpkg - architectureのコマンドラインオプションを使用して、これらの変数のうち1つだけを表示したり、それらの値に対してテストを実行したりできます。
どのようにしてdpkg-architectureがアーキテクチャを推論するのかわかりませんが、そのドキュメントやソースコードを見ることができます(dpkg-architectureおよびdpkgシステムの大部分は一般的にPerlです)。
I686の代わりに64ビットOSを使用している場合、x86_64
の出力にはia64
またはuname -a
があります。つまり、あなたはこれら二つの文字列のどれも持っていません。あなたは32ビットOSを持っています(これはあなたのCPUが64ビットではないことを意味しないことに注意してください)。
そのシステムは32ビットです。 uname
内のiX86は、32ビットアーキテクチャであることを意味します。 64ビットであれば、それは戻ります
Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 x86_64 i686 x86_64 x86_64 GNU/Linux
今日では、システムはマルチアーキテクチャになる可能性があるため、とにかく意味がありません。コンパイラのデフォルトのターゲットを見つけることができます。
$ cc -v 2>&1 | grep ^ Target ターゲット:x86_64-pc-linux-gn
あなたはこんにちは世界をコンパイルしようとすることができます:
$ echo 'int main(){return 0; | cc -xc - -o foo $ファイルfoo foo:ELF 64ビットLSB実行可能ファイル、x86-64、バージョン1(SYSV)、動的リンク、インタプリタ/ lib64/ld-linux- x86-64.so.2、GNU/Linux 2.6.32の場合、BuildID [sha1] = b114e029a08abfb3c98db93d3dcdb7435b5bba0c、削除されない
に関しては、答えは "getconf LONG_BIT" です。
私はそれを行うための簡単な関数を 'C'で書きました。
/*
* check_os_64bit
*
* Returns integer:
* 1 = it is a 64-bit OS
* 0 = it is NOT a 64-bit OS (probably 32-bit)
* < 0 = failure
* -1 = popen failed
* -2 = fgets failed
*
* **WARNING**
* Be CAREFUL! Just testing for a boolean return may not cut it
* with this (trivial) implementation! (Think of when it fails,
* returning -ve; this could be seen as non-zero & therefore true!)
* Suggestions?
*/
static int check_os_64bit(void)
{
FILE *fp=NULL;
char cb64[3];
fp = popen ("getconf LONG_BIT", "r");
if (!fp)
return -1;
if (!fgets(cb64, 3, fp))
return -2;
if (!strncmp (cb64, "64", 3)) {
return 1;
}
else {
return 0;
}
}
良い考え、 'getconf'です。
環境変数を使用して確認することもできます。
echo $HOSTTYPE
結果:
i386
- > 32ビット
x86_64
- > 64ビット
抽出元: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
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
Bashでは、整数オーバーフローを使用します。
if ((1 == 1<<32)); then
echo 32bits
else
echo 64bits
fi
他のプロセスを起動したりファイルを開いたりするよりもはるかに効率的です。
1を32だけ左にシフトして1になると、システムは32ビットになります。 1を64だけ左にシフトして1になると、システムは64ビットになります。
言い換えると、
if echo $((1<<32)) gives 1 then your system is 32 bit
。
if echo $((1<<64)) gives 1 then your system is 64 bit
。
64ビットまたは32ビットを取得するための簡単なスクリプト
if $(getconf LONG_BIT | grep '64'); then
echo "64 bit system"
else
echo "32 bit system"
fi
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
この間ずっと、だれも言及していないと私は信じることができません。
Sudo lshw -class cpu
cPUハードウェアの速度、数量、サイズ、および機能に関する詳細を取得する。
[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"
64ビットは通常x86_64
で、32ビットはi686
などであるという事実に基づいて.
利用可能なバイナリが非常に限られている場合(initramfsなど)、私の同僚は以下を提案しました。
$ ls -l /lib*/ld-linux*.so.2
私のALT Linuxシステムでは、i586は/lib/ld-linux.so.2
を、x86_64は/lib64/ld-linux-x86-64.so.2
を持っています。