当我输入命令 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
脚本时会很有用:我要为哪种架构构建?
当我输入命令 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
脚本时会很有用:我要为哪种架构构建?
uname -m
。 它是 uname --machine
的缩写,它会输出:x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
否则,您需要在CPU上输入以下命令:与Linux内核无关。cat /proc/cpuinfo
或:
grep flags /proc/cpuinfo
在"flags"参数下,您会看到各种值:What do the flags in /proc/cpuinfo mean?
其中之一是名为lm
的标志:Long Mode
(x86-64:amd64,也称为Intel 64,即64位能力)
lm ==> 64-bit processor
或者使用lshw
(如下面由Rolf of Saxony提到的那样),不需要sudo
(仅用于过滤CPU宽度):
lshw -class cpu|grep "^ width"|uniq|awk '{print $2}'
注意:您可以安装32位内核的64位CPU。
(正如ysdx在他/她自己的回答中提到的那样,"现在,一个系统可以多架构,所以这也没有任何意义。您可能需要找到编译器的默认目标")
如果您正在运行64位平台,您将在uname -a的输出中看到x86_64或非常相似的内容。
要获取您特定机器的硬件名称,请运行
uname -m
您还可以调用
getconf LONG_BIT
返回32或64
uname -m
输出 x86_64
表示系统架构为 64 位;
getconf LONG_BIT
输出 32
表示操作系统运行在 32 位模式下。
两者都是正确的,但输出的信息不同。 - Stephanuname -m
对于 QP 的 configure
来说并不是有用的,因为它可能会给出错误的结果。getconf LONG_BIT
可以获取 C 库的默认位数,但这个值可能不是由 CC
指定的编译器所需要的正确位数。 - user3710044getconf LONG_BIT
可能会提供32。 - ysdxlscpu 命令将列出你的 CPU 的以下信息以及其他相关信息:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
...
另一个有用的简便确定命令如下:
命令:
getconf LONG_BIT
答案:
该命令
$ arch
等同于
$ uname -m
但是打字速度是原先的两倍
#include <stdio.h>
int main(void)
{
printf("%d\n", __WORDSIZE);
return 0;
}
我特别关注在Debian中构建软件的问题(安装的Debian系统可以是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
来获取主机系统的架构,这不需要安装 dpkg-dev
包。 - Mark Longairdpkg --print-architecture
自 Debian 诞生以来就一直可用。这个命令可以使用,但是只限于 Debian 及其衍生版本。 - user3710044如果您的操作系统是64位,那么在运行uname -a
命令后输出中,您会看到x86_64
或者 ia64
,而不是 i686。如果输出中没有这两个字符串,则表示您使用的是32位操作系统(请注意这并不意味着您的CPU不支持64位)。
uname
输出中还有其他值可以指示64位操作系统。并非全世界都是x86或Itanium... - Toby Speight现在,一个系统可以是多架构的,因此无论如何都没有意义。您可能想要找到编译器的默认目标:
$ cc -v 2>&1 | grep ^Target Target: x86_64-pc-linux-gn
您可以尝试编译一个hello world程序:
$ echo 'int main() { return 0; }' | cc -x c - -o foo $ file foo foo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, not stripped
cc -v | grep …
已经是特定于编译器的,因此可以直接使用 cc -dumpmachine
,它不需要使用 grep,并且不仅被 GCC 支持。 - Anton Samsonov您还可以使用环境变量进行检查:
echo $HOSTTYPE
结果:
i386
-> 32位
x86_64
-> 64位
摘自:http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
/bin/bash
的内置变量,不是环境变量。如果您已经依赖于 Bash,则可以正常工作。但是,请注意结果可能是 i386
、i486
、i586
、i686
或其他值。 - user3710044
uname -i
、uname -p
和uname -m
会显示什么? - ruben2020