当我输入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
否则,不是针对 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
(仅用于获取 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
lscpu
将列出有关您的 CPU 的其他信息:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
...
另一个便于确定的有用命令如下:
命令:
getconf LONG_BIT
回答:
命令
$ arch
相当于
$ uname -m
但打字速度快两倍
我想知道这个专门用于在Debian中构建软件(安装的 Debian 系统可以是带有 32 位内核、库等的 32 位版本,或者它可以是带有为 64- 编译的东西的 64 位版本)位而不是 32 位兼容模式)。
Debian 包本身需要知道它们的架构(当然),当他们实际创建包含所有元数据的包时,包括平台架构,所以有一个打包工具可以输出它以供其他打包工具和脚本使用,称为dpkg 架构。它既包括配置为构建的目标,也包括当前主机。(但通常这些是相同的。)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)。
#include <stdio.h>
int main(void)
{
printf("%d\n", __WORDSIZE);
return 0;
}
如果你有一个 64 位操作系统,而不是 i686,你有x86_64
或ia64
在uname -a
. 因为您没有这两个字符串中的任何一个;您有一个 32 位操作系统(请注意,这并不意味着您的 CPU 不是 64 位)。
那个系统是32位的。iX86 inuname
表示它是 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
如今,一个系统可以是多架构的,所以无论如何它都没有意义。您可能希望找到编译器的默认目标:
$ cc -v 2>&1 | grep ^目标 目标: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,未剥离
我在“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'!
在 Bash 中,使用整数溢出:
if ((1 == 1<<32)); then
echo 32bits
else
echo 64bits
fi
它比调用另一个进程或打开文件要高效得多。
您还可以使用环境变量进行检查:
echo $HOSTTYPE
结果:
i386
-> 32 位
x86_64
-> 64 位
摘自:http ://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
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
如果将 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
.
如果可用二进制文件(例如 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
.
$ 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
我不敢相信,在这段时间里,没有人提到:
sudo lshw -class cpu
获取有关 CPU 硬件的速度、数量、大小和功能的详细信息。
[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"
基于通常是 64 位x86_64
和 32 位i686
等的事实。
首先,您必须下载 Virtual Box。然后选择新的 32 位 Linux。然后使用它启动linux。如果它启动了,那么它是 32 位的,如果它没有启动,那么它是一个 64 位的。