当我输入命令 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
脚本时会很有用:我要为哪种架构构建?
那个系统是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
/*
* 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;
}
}
CHAR_BIT*sizeof(void*)
或__WORDSIZE
。 - cevingfgets
:https://dev59.com/rWQo5IYBdhLWcg3wGsLN - cevingif ((1 == 1<<32)); then
echo 32bits
else
echo 64bits
fi
它比调用另一个进程或打开文件更高效。
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
[ -z `uname -m | grep 64` ] && echo "32位" || echo "64位"
基于通常情况下,64位为x86_64
,32位为i686
等。
echo $((1<<32))
得到的结果是1,则你的系统是32位的;如果输入命令echo $((1<<64))
得到的结果是1,则你的系统是64位的。请注意保留HTML标签。我不敢相信,在这么长的时间里,没有人提到:
sudo lshw -class cpu
获取有关CPU硬件速度、数量、大小和功能的详细信息。
完全
正确的,但鉴于我已经加入了有关 CPU 硬件
的重要限制条件,我不认为这个答案会误导人。它只是在主题上添加了一个小的信息片段。我注意到您没有提供自己的答案!无论精准、正确还是其他。 - Rolf of Saxony$ ls -l /lib*/ld-linux*.so.2
/lib/ld-linux.so.2
,而x86_64有/lib64/ld-linux-x86-64.so.2
。$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
获取64位或32位的简单脚本
if $(getconf LONG_BIT | grep '64'); then
echo "64 bit system"
else
echo "32 bit system"
fi