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

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


当前回答

该系统是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

其他回答

如果将1向左移32,得到1,系统就是32位的。 如果将1向左移动64位得到1,系统就是64位的。

换句话说,

如果echo $((1<<32))给出1,则系统是32位的。

如果echo $((1<<64))返回1,则系统为64位。

如果一个二进制文件在可用的二进制文件中受到严重限制(例如在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。

在Bash中,使用整数溢出:

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

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

简单的脚本获得64位或32位

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
        else
            echo "32 bit system"
        fi

如果您运行的是64位平台,那么在uname -a的输出中会看到x86_64或类似的东西

运行特定的机器硬件名称

uname -m

你也可以打电话

getconf LONG_BIT

哪个返回32或64