如何确定给定的Linux是32位还是64位?

时间:2008-10-29 06:59:41

标签: linux shell 32bit-64bit processor

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

这在编写configure脚本时很有用,例如:我要为哪种架构构建?

20 个答案:

答案 0 :(得分:731)

试试uname -m。缺少uname --machine并输出:

x86_64 ==> 64-bit kernel
i686   ==> 32-bit kernel

否则,不是Linux内核,而是CPU ,键入:

cat /proc/cpuinfo

或:

grep flags /proc/cpuinfo

在“flags”参数下,您会看到各种值:请参阅“What do the flags in /proc/cpuinfo mean?” 其中一个名为lmLong Modex86-64:amd64,也称为Intel 64,即支持64位)

lm ==> 64-bit processor

using lshw(如below提到Rolf of Saxony),没有sudo(仅用于获取cpu宽度):

lshw -class cpu|grep "^       width"|uniq|awk '{print $2}'

注意:您可以安装一个安装了32位内核的64位CPU ysdx中提及his/her own answer,“现在,系统可以 multiarch ,所以它无论如何都没有意义。您可能想找到默认目标编译器“)

答案 1 :(得分:153)

如果您运行的是64位平台,您会在uname -a

的输出中看到x86_64或类似的内容

要运行您的特定计算机硬件名称

uname -m

您也可以致电

getconf LONG_BIT

返回32或64

答案 2 :(得分:42)

lscpu将列出有关您的CPU的其他信息:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...

答案 3 :(得分:33)

另一个易于确定的有用命令如下:

命令:

getconf LONG_BIT

答案:

  • 32,如果操作系统是32位
  • 64,如果OS是64位

答案 4 :(得分:12)

命令

$ arch    

相当于

$ uname -m

但输入速度是

的两倍

答案 5 :(得分:11)

我想知道这个在Debian中专门用于构建软件(已安装的Debian系统可以是32位版本,带有32位内核,库等,或者它可以是64位版本编译为64位而不是32位兼容模式的东西)。

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 - 架构的命令行选项打印其中一个变量或对其值进行测试。

我不知道dpkg-architecture如何推断架构,但你可以查看它的文档或源代码(dpkg-architecture和dpkg系统的大部分都是Perl)。

答案 6 :(得分:11)

#include <stdio.h>

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

答案 7 :(得分:10)

如果您使用的是64位操作系统,而不是i686,则x86_64的输出中有ia64uname -a。因为你没有这两个字符串中的任何一个;你有一个32位操作系统(请注意,这并不意味着你的CPU不是64位)。

答案 8 :(得分:6)

那个系统是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

答案 9 :(得分:5)

关于the answer "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'!

答案 10 :(得分:4)

您还可以使用环境变量进行检查:

echo $HOSTTYPE

结果:

i386 - &gt; 32位

x86_64 - &gt; 64位

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

答案 11 :(得分:3)

在Bash中,使用整数溢出:

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

它比调用其他进程或打开文件更有效。

答案 12 :(得分:3)

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

答案 13 :(得分:2)

如果你将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

答案 14 :(得分:1)

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

答案 15 :(得分:1)

$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set

答案 16 :(得分:1)

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

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

答案 17 :(得分:1)

我无法相信,在这段时间里,没有人提到过:

sudo lshw -class cpu

获取有关CPU硬件的速度,数量,大小和功能的详细信息。

答案 18 :(得分:1)

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

基于64位通常为x86_64且32位为i686等的事实。

答案 19 :(得分:-6)

首先,您必须下载Virtual Box。然后选择new和32位Linux。然后使用它启动linux。如果它启动那么它是32位,如果它不是那么它是64位。