it-swarm.cn

如何确定Linux内核体系结构?

uname -m给出i686和uname -m在Red Hat Enterprise Linux Server版本5.4(Tikanga)机器中提供i686 i386输出。我需要在该计算机上安装Oracle数据库10g第2版。那么,如何确定内核体系结构是32位还是64位呢?

105
user2914

i386和i686均为32位。
x86_64是64位

64位示例:

[email protected]:~$ uname -a  
Linux behrooz 2.6.32-5-AMD64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux

编辑:
参见 对于我的Linux是我的linux ARM 32还是64位?

99
Behrooz

这很简单!使用Arch命令。

49
PHPst

@ behrooz 是正确的。不幸的是uname要求您了解架构。实际上,我在寻找体系结构列表时发现 本文 可以回答您的问题。关于uname -m

x86_64 GNU/Linux表示您正在运行64位Linux内核。如果使用,请参阅i386/i486/i586/i686,它是32位内核。

确定硬件是否能够运行64位内核

grep flags /proc/cpuinfo

在输出中查找以下内容(从 此stackoverflow答案 检索的所有标志,代表同一个问题)

  • lm标志表示长模式CPU-64位CPU
  • tm标志表示受保护的模式-32位CPU
  • rm标志表示实模式-16位CPU
32
xenoterracide

(编辑:这个答案很错误。感谢@Lizardx的评论)

在Bash中,使用整数溢出:

if ((1<<32)); then
  echo 64bits
else
  echo 32bits
fi

这比调用另一个进程或打开文件要有效得多。

21
Luchostein

对于Debian

在我的电脑上

〜> dpkg --print-architecture 
 AMD64 
〜> dpkg --print-foreign-architectures 
 i386 

我的Raspberry Pi 2

〜> dpkg --print-architecture 
 armhf 
18

最简单的方法是运行:

getconf LONG_BIT

它将输出64或32,具体取决于它是32位还是64位。

例如:

[email protected]:~$ getconf LONG_BIT
64
13
dannyw

使用 Formake项目 中的syscap

syscap允许探查许多系统属性并测试依赖项。这是一个可移植的Shell脚本。

获取CPU架构:

syscap info -Arch

获取内核名称和版本:

syscap info -kernel -kernver
2
Alex

另一种方法是检查某些系统文件的编译体系结构,例如

$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
1
minaev

或者,如果您想自己实现某些功能,则可以使用name命令内部执行的方式:

#include <sys/utsname.h>
#include <stdio.h>

int main() {
    struct utsname name;
    uname(&name);
    printf("%s\n",name.machine);
    return 0;
}
0
Meow

这是使用uname的另一种方法。

来自man uname

... -i, --hardware-platform print the hardware platform or "unknown" ...

# uname -i x86_64#

0
clusterdude

如果您正在寻找一个简单的单线,这是我发现的最可靠的解决方案,它返回642。不管您是否正在运行ARM=),它都可以在使用bashsh的任何系统上运行。

请注意,这将假定系统是32位还是64位。如果您需要检测8-16位或其他位结构,请参阅下面的说明。

[$((0xffffffff))-eq -1] &&回声32 ||回声64

这里是什么?
逻辑非常简单,并且全都归结为计算机存储带符号整数的方式。 32位体系结构只有32位可用于存储带符号整数,而64位体系结构则只有64位!换句话说,可以存储的整数集是有限的。该组的一半代表负数,一半代表正数。等于-1的有符号整数表示为可以存储在该体系结构的给定位数中的最大数字。在32位系统上,-1可以用十六进制值0xFFFFFFFF表示(它是32个二进制位,都等于1)。在64位系统上,0xFFFFFFFF转换为4,294,967,295(以10为底),而0xFFFFFFFFFFFFFFFF为-1)。您可以看到这对于8位或16位系统(在0xFF和0xFFFF分别等于-1)时如何轻松进行扩展。

0
b_laoshi