当我输入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

我怎么知道给定的操作系统是32位还是64位?

这在编写配置脚本时很有用,例如:我为什么体系结构构建?


当前回答

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

其他回答

该系统是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
#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}

在Bash中,使用整数溢出:

if ((1 == 1<<32)); then
  echo 32bits
else
  echo 64bits
fi

它比调用另一个进程或打开文件要高效得多。

[-z ' uname -m | grep 64 '] && echo "32-bit" || echo "64-bit"

基于64位通常是x86_64, 32位是i686等等的事实。

你也可以使用环境变量进行检查:

echo $HOSTTYPE

结果:

I386 -> 32位

X86_64 -> 64位

摘自:http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html