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

评论

那是第一句话的错字吗:uname -m和uname -m?

另请参见Linux命令以返回位数(32或64)?如果uname -m显示i?86,则说明您有32位系统。

另请参阅获取发行版名称和版本号

Gilles链接到的问题提供了一个有趣的解决方案:getconf WORD_BIT。

getconf WORD_BIT在我的64位Ubuntu上返回32

#1 楼

i386和i686都是32位。
x86_64是64位

64位示例:

behrooz@behrooz:~$ uname -a  
Linux behrooz 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux


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

评论


那armv7l呢?在任何情况下,具有简单布尔响应的命令都会很美味。

–user7543
13-10-26在23:40

@ user7543这是32位的ARM,因为我们还没有64位的ARM,当我们这样做的时候,情况会有所不同。

–贝鲁兹
13-10-27在7:38

我觉得我应该做我的答案社区维基,但不知道如何做。

–贝鲁兹
2014年12月26日在21:20

试试:uname -m。那只会显示架构。

–́Alexej Magura
16-11-18在14:29



arm64称为aarch64

–xdevs23
19年11月16日在13:26

#2 楼

这很简单!使用arch命令。

评论


奇怪...在我的2013 MacBook Pro上,arch返回i386,但uname -a显示x86_64。

– Turboladen
13年8月19日在20:38



@turboladen“为什么uname和arch的输出不同?” =superuser.com/questions/835514/…

–user10607
16年5月27日在14:44

注意POSIX尚未定义拱门pubs.opengroup.org/onlinepubs/9699919799/idx/utilities.html

–史蒂芬·潘妮(Steven Penny)
16-11-26在2:24

拱是优名-m

– Themelis
20年6月2日,11:07

#3 楼

@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


评论


lm标志只是表示CPU支持64位,还是表示它以64位运行。我建议依靠拱,知道对于64位它将是x86_64或对于32位将是i?86。

–penguin359
2011年5月2日在21:45

@ penguin359表示cpu支持64位。

– xenoterracide
2011年5月2日22:57

@xeno因此不能用于确定内核体系结构。

–penguin359
2011年5月2日23:58

@ penguin359不,答案不清楚吗?

– xenoterracide
2011年5月3日在8:55

@ penguin359,否,但是查找操作系统是否正在运行64位以及是否支持硬件(如果不是)通常非常有用

– xenoterracide
2011年5月3日在20:09

#4 楼

对于Debian:

在我的PC上

    ~ > dpkg --print-architecture
    amd64


    ~ > dpkg --print-foreign-architectures
    i386


我的Raspberry Pi 2

/>
    ~ > dpkg --print-architecture
    armhf


评论


这在确定要与checkinstall thx一起使用的软件包体系结构时最有效!

–水瓶座力量
16年2月11日,在1:59

谢谢。我一直在寻找可以删除“标准”“ amd64” /“ i386”体系结构名称的东西,而不仅仅是“ x86_64”。在命名预编译发行版时,没有人使用该术语。

–悬崖
19年7月11日在19:25

CentOS / RedHat是否具有等效命令?还是在基于RH的操作系统上有问题?试图增加对RH系列角色的支持,以扩展将来服务器的OS选项。

–扎克
20/12/20在20:48

#5 楼

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

在Bash中,使用整数溢出:

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


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

评论


如此聪明,也提醒我们什么是芯片架构

– code_monk
2015年2月19日在22:44

虽然优雅,但不幸的是这是不正确的:uname -m == i686但如果((1 << 32));然后echo 64bits; fi == 64bits这是32位的PAE内核,而不是64位的内核。 CPU支持64位,而amd64。由于问题是如何确定内核拱门,因此该解决方案将产生错误的结果。

–蜥蜴
16-11-18在0:40



注意((是Bashism,未由POSIX mywiki.wooledge.org/Bashism#Conditionals定义

–史蒂芬·潘妮(Steven Penny)
16-11-26在2:25

我已经在某些32位体系结构上进行了尝试,并且认为它是64位。

– dannyw
17年2月18日在2:16

这可以工作((1 << 32)-1)

–艾维安·斯特凡·斯蒂皮奇(Ivijan StefanStipić)
18年1月17日在10:53

#6 楼

最简单的方法是运行:

getconf LONG_BIT


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

例如:

dannyw@dannyw-redhat:~$ getconf LONG_BIT
64


评论


这个答案是误导的。如果启用了多体系结构支持并通过32位安装安装了64位内核,则尽管您正在运行64位内核,但getconf LONG_BIT将打印32。

– Kenn
18年7月23日在7:42

#7 楼

使用Formake项目中的syscap

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

获取CPU体系结构:

syscap info -arch


获取内核名称和版本:

syscap info -kernel -kernver


#8 楼

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

$ 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


评论


那就是系统架构,并不总是内核架构。有关更多变化,请参见SU上的此答案。

–吉尔斯'所以-不再是邪恶的'
2011年5月4日,9:47

从理论上讲,它们可能有所不同,但是在任何实际安装中它们是否有可能不匹配?

– minaev
2011年5月5日,11:30

一些发行版在x86版本上附带了一个amd64内核。我不知道有多少人使用它们,我检查了Debian popcon,但它与各种统计数据之间没有关联。我认为主要用例是拥有32位主操作系统并在chroot或VM中运行64位操作系统。

–吉尔斯'所以-不再是邪恶的'
2011年5月5日20:00

@Gilles您会爱上您将学到的有关新x32架构的内容,如果我还不算太晚的话,您当然会错了。 wiki.debian.org/X32Port

–贝鲁兹
13-10-27在7:41



#9 楼

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

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

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


#10 楼

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

来自man uname

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

# uname -i x86_64
#

评论


直到给出“未知”

– Dagelf
19年7月5日在19:22

#11 楼

如果您正在寻找一种简单的单线解决方案,那么这是我发现的最可靠的解决方案,它返回64或32。它不在乎是否正在运行ARM,并且它可以在任何系统上运行使用bash或sh。

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

[ $((0xffffffff)) -eq -1 ] && echo 32 || echo 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)时如何轻松进行扩展。

#12 楼

对于Debian Linux衍生系统。
在64位系统上:
$ dpkg-architecture -q DEB_BUILD_ARCH
amd64

在32位系统上:
$ dpkg-architecture -q DEB_BUILD_ARCH
i386