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

当我键入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脚本时这很有用,例如:我在为什么构build?

尝试uname -m 。 这是缺lessuname --machine ,它输出:

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

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

 cat /proc/cpuinfo 

要么:

 grep flags /proc/cpuinfo 

在“flags”参数下,你会看到不同的值:参见“ / proc / cpuinfo中的标志是什么意思? ”其中一个叫做lmLong Mode ( x86-64 :amd64,也被称为Intel 64,即64位能力)

 lm ==> 64-bit processor 

或者使用lshw (如下面 萨克森州的Rolf所述 ),没有sudo (只是为了刷新cpu的宽度):

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

注意:您可以安装一个64位CPU,并安装32位内核
(正如ysdx在他/她自己的回答中提到的那样,“现在,一个系统可以是多元的,所以它无论如何也没有意义,你可能想要find编译器的默认目标”)

如果你正在运行一个64位的平台,你会在uname -a的输出中看到x86_64或类似的东西

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

 uname -m 

你也可以打电话

 getconf LONG_BIT 

它返回32或64

lscpu将列出这些关于您的CPU的其他信息:

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

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

命令:

 getconf LONG_BIT 

回答:

  • 32,如果操作系统是32位
  • 64,如果OS是64位
 #include <stdio.h> int main(void) { printf("%d\n", __WORDSIZE); return 0; } 

命令

 $ arch 

相当于

 $ uname -m 

但是input速度要快两倍

我想知道这个专门用于在Debian中构build软件的问题(已安装的Debian系统可以是一个32位版本的32位内核,库等,也可以是一个64位版本,而不是32位兼容模式)。

Debian软件包自己需要知道它们是什么架构(当然),当它们实际创build包含所有元数据(包括平台架构)的包时,所以有一个打包工具将其输出用于其他打包工具和脚本dpkg-architecture 。 它包括它为什么configurationbuild立,以及当前的主机。 (通常这些都是一样的。)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 

您只能打印其中一个variables,或者使用dpkg -architecture的命令行选项对其值进行testing。

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

如果您有64位操作系统,而不是i686,则在uname -a的输出中有x86_64ia64 。 因为你没有这两个string中的任何一个; 你有一个32位的操作系统(注意,这并不意味着你的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 

关于“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'!

如今,一个系统可以是多元化的,所以它无论如何都是没有意义的。 您可能想要find编译器的默认目标:

  $ cc -v 2>&1 |  grep ^目标
目标:x86_64-pc-linux-gn

你可以尝试编译一个hello world:

  $ echo'int main(){return 0;  }'|  cc -xc  -  -o foo
 $文件foo
 foo:用于GNU / Linux 2.6.32,BuildID [sha1]的ELF 64位LSB可执行文件,x86-64,版本1(SYSV),dynamic链接的解释器/lib64/ld-linux-x86-64.so.2。 = b114e029a08abfb3c98db93d3dcdb7435b5bba0c,未剥离

您也可以使用环境variables进行检查:

 echo $HOSTTYPE 

结果:

i386 – > 32位

x86_64 – > 64位

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

getconf使用最less的系统调用:

 $ 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 
 $ grep "CONFIG_64" /lib/modules/*/build/.config # CONFIG_64BIT is not set 

在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 

我无法相信在这个时候,没有人提到过:

 sudo lshw -class cpu 

以获得有关CPU硬件的速度,数量,大小和function的详细信息。

如果可用的二进制文件严重受限(例如在initramfs中),我的同事们build议:

 $ ls -l /lib*/ld-linux*.so.2 

在我的ALT Linux系统上,i586具有/lib/ld-linux.so.2而x86_64具有/lib64/ld-linux-x86-64.so.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

[-z uname -m | grep 64 uname -m | grep 64 ] && echo“32-bit”|| 回声“64位”

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

首先你必须下载Virtual Box。 然后select一个新的和一个32位的Linux。 然后用它启动linux。 如果它启动,那么它是32位,如果它不是那么它是一个64位。