Swa*_*jee 466 linux shell processor 32bit-64bit
当我输入时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
Run Code Online (Sandbox Code Playgroud)
我怎么知道给定的操作系统是32位还是64位?
这在编写configure脚本时很有用,例如:我要构建什么样的架构?
Von*_*onC 733
试试uname -m.缺少的uname --machine,它输出:
x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
Run Code Online (Sandbox Code Playgroud)
否则,不是针对Linux内核,而是针对CPU,键入:
cat /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)
要么:
grep flags /proc/cpuinfo
Run Code Online (Sandbox Code Playgroud)
在"flags"参数下,您将看到各种值:请参阅" / proc/cpuinfo中的标志是什么意思? "其中一个名称为lm:Long Mode(x86-64:amd64,也称为Intel 64,即64位能)
lm ==> 64-bit processor
Run Code Online (Sandbox Code Playgroud)
或者使用lshw(如下面由萨克森的Rolf所述),没有sudo(只是为了获得cpu宽度):
lshw -class cpu|grep "^ width"|uniq|awk '{print $2}'
Run Code Online (Sandbox Code Playgroud)
注意:您可以安装具有32位内核的64位CPU.
(正如ysdx在他/她自己的回答中提到的那样,"现在,系统可以是多系统的,所以它无论如何都没有意义.你可能想找到编译器的默认目标")
Tho*_*dal 154
如果您运行的是64位平台,您会看到x86_64或uname -a 输出中非常相似的东西
要运行特定的计算机硬件名称
uname -m
Run Code Online (Sandbox Code Playgroud)
你也可以打电话
getconf LONG_BIT
Run Code Online (Sandbox Code Playgroud)
返回32或64
小智 42
lscpu 将列出有关您的CPU的其他信息:
Architecture: x86_64
CPU op-mode(s): 32-bit, 64-bit
...
Run Code Online (Sandbox Code Playgroud)
小智 33
另一个易于确定的有用命令如下:
命令:
getconf LONG_BIT
Run Code Online (Sandbox Code Playgroud)
回答:
Gre*_*kel 12
命令
$ arch
Run Code Online (Sandbox Code Playgroud)
相当于
$ uname -m
Run Code Online (Sandbox Code Playgroud)
但输入的速度是原来的两倍
Ree*_*ges 11
我想知道这是专门用于在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
Run Code Online (Sandbox Code Playgroud)
您可以使用dpkg -architecture的命令行选项打印其中一个变量或对其值进行测试.
我不知道dpkg-architecture如何推断架构,但你可以查看它的文档或源代码(dpkg-architecture和dpkg系统的大部分都是Perl).
小智 11
#include <stdio.h>
int main(void)
{
printf("%d\n", __WORDSIZE);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Den*_* R. 10
如果你有一个64位的操作系统,而不是i686,你有x86_64或ia64在输出中uname -a.因为你没有这两个字符串中的任何一个; 你有一个32位操作系统(请注意,这并不意味着你的CPU不是64位).
该系统是32位.iX86 uname意味着它是一个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
Run Code Online (Sandbox Code Playgroud)
如今,一个系统可以是多层的,所以无论如何它都没有意义.您可能想要找到编译器的默认目标:
$ 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
小智 6
您还可以使用环境变量进行检查:
echo $HOSTTYPE
Run Code Online (Sandbox Code Playgroud)
结果:
i386-> 32 位
x86_64-> 64 位
摘自:http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
我在'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;
}
}
Run Code Online (Sandbox Code Playgroud)
好主意,'getconf'!