如何判断给定的 Linux 是 32 位还是 64 位?
- 2024-10-14 08:40:00
- admin 原创
- 99
问题描述:
当我输入时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
,例如:我正在为哪个架构构建?
解决方案 1:
尝试一下uname -m
。缺少了uname --machine
它就会输出:
x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
否则,不是针对 Linux 内核,而是针对 CPU,您输入:
cat /proc/cpuinfo
或者:
grep flags /proc/cpuinfo
在“flags”参数下,你会看到各种值:参见“ /proc/cpuinfo中的flags是什么意思? ”其中有一个名为lm
:Long Mode
(x86-64 :amd64,也称为Intel 64,即支持64位)
lm ==> 64-bit processor
或者使用lshw
(如下文Rolf of Saxony所述),无需sudo
(仅用于 grepping CPU 宽度):
lshw -class cpu|grep "^ width"|uniq|awk '{print $2}'
注意:你可以使用安装了 32 位内核的 64 位 CPU。
(正如ysdx在其自己的回答中提到的,“如今,系统可以是多架构的,所以这无论如何都没有意义。你可能想要找到编译器的默认目标”)
解决方案 2:
如果你运行的是 64 位平台,你会在uname -a的输出中看到 x86_64 或非常类似的内容
要获取特定机器硬件名称,请运行
uname -m
您还可以致电
getconf LONG_BIT
返回 32 或 64
解决方案 3:
lscpu
将列出有关您的 CPU 的其他信息:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
...
解决方案 4:
另一个便于确定的有用命令如下:
命令:
getconf LONG_BIT
回答:
32(如果操作系统是 32 位)
64(如果操作系统是 64 位)
解决方案 5:
我对在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 -architecture的命令行选项对它们的值进行测试。
我不知道 dpkg-architecture 如何推断出架构,但你可以查看它的文档或源代码(dpkg-architecture 和 dpkg 系统的大部分内容通常是 Perl)。
解决方案 6:
命令
$ arch
相当于
$ uname -m
但打字速度却是原来的两倍
解决方案 7:
#include <stdio.h>
int main(void)
{
printf("%d
", __WORDSIZE);
return 0;
}
解决方案 8:
如果您使用的是 64 位操作系统,而不是 i686,则的输出中会有x86_64
或。 因为您没有这两个字符串中的任何一个;所以您使用的是 32 位操作系统(请注意,这并不意味着您的 CPU 不是 64 位的)。ia64
`uname -a`
解决方案 9:
该系统是 32 位的。iX86uname
表示它是 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
解决方案 10:
如今,系统可以是多架构的,所以这无论如何都没有意义。您可能想要找到编译器的默认目标:
$ cc -v 2>&1 | grep ^Target
目标:x86_64-pc-linux-gn
你可以尝试编译一个hello world:
$ echo'int main() { return 0; }' | cc -xc - -o foo
$ 文件 foo
foo:ELF 64 位 LSB 可执行文件,x86-64,版本 1(SYSV),动态链接,解释器 /lib64/ld-linux-x86-64.so.2,适用于 GNU/Linux 2.6.32,BuildID[sha1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c,未被剥离
解决方案 11:
您还可以使用环境变量进行检查:
echo $HOSTTYPE
结果:
i386
-> 32 位
x86_64
-> 64 位
摘自:http: //www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
解决方案 12:
关于答案“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”!
解决方案 13:
在 Bash 中,使用整数溢出:
if ((1 == 1<<32)); then
echo 32bits
else
echo 64bits
fi
这比调用另一个进程或打开文件效率高得多。
解决方案 14:
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
解决方案 15:
如果将 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
。
解决方案 16:
[ -z
uname -m | grep 64 ] && echo "32-bit" || echo "64-bit"
x86_64
基于通常为 64 位且为 32 位i686
等的事实。
解决方案 17:
如果可用二进制文件受到严重限制(例如在 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
。
解决方案 18:
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
解决方案 19:
我不敢相信这么长时间以来没有人提到:
sudo lshw -class cpu
获取有关 CPU 硬件的速度、数量、大小和功能的详细信息。
解决方案 20:
获取 64 位或 32 位的简单脚本
if $(getconf LONG_BIT | grep '64'); then
echo "64 bit system"
else
echo "32 bit system"
fi
解决方案 21:
首先,您必须下载 Virtual Box。然后选择新的 32 位 Linux。然后使用它启动 Linux。如果可以启动,则它是 32 位的;如果不能启动,则它是 64 位的。
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 项目管理必备:盘点2024年13款好用的项目管理软件