Linux命令返回位数(32或64)?


Answers:


13
  • 通过检查中的行,可以查看CPU是64位,32位还是两者均可用。您必须知道架构家族中可能的标记。例如,在i386 / amd64平台上,该标志标识支持amd64的CPU(不具有该标志的CPU仅限于i386)。flags/proc/cpuinfolm

    grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo    # Assuming a PC
    
  • 通过使用查询架构,可以查看内核是32位还是64位uname -m。例如,i[3456]8632位x86_64为64位。请注意,在几种体系结构上,64位内核可以运行32位Userland程序,因此,即使uname -m显示了64位内核,也无法保证64位库将可用。

    [ "$(uname -m)" = "x86_64" ]    # Assuming a PC
    

    还请注意,这uname -m可能会返回“虚拟”值。例如,在Linux下,如果您setarch i386 bash在amd64系统上运行,并且uname -m从该bash 运行,则会看到uname -mreport i386。即使内核是64位内核,这也可以有效地使您假装自己在“ 32位系统”上,例如,无需设置交叉编译即可编译32位程序。

  • 通过使用命令查询LSB支持,可以查看用户区中可用的内容lsb_release。更精确地,lsb_release -s打印:支持的LSB功能的- 分隔列表。每个功能都有表格。例如,ix86 C库的可用性用表示,而amd64的类似物表示。但是,并不是每个发行版都声明所有可用的LSB模块,因此可用的可用空间可能比用这种方法检测到的更多。module-version-architecturecore-2.0-ia32core-2.0-amd64

  • 您可以通过编译打印sizeof(void*)或的5行C程序来找出开发所需的字长(假设有C编译器可用)sizeof(size_t)


3
在GNU系统上(如果有的话,还有其他系统),您应该能够执行getconf WORD_BITgetconf LONG_BIT不必编译自己的C程序(尽管是普通的和可移植的)。
暂停,直到另行通知。

@丹尼斯:谢谢你的指正。我没想到要getconf在这里使用。原则上听起来不错,但是如果有多个(通常在Linux上为gcc / icc或类似的版本,在其他地方为gcc / native cc),则很难确保结果适用于要使用的特定C编译器。在标准系统上,getconf应将其应用于c89c99$(getconf PATH),但实际上,我会担心有人安装cc由供应商c89包装程序运行的替代产品。
吉尔(Gilles)'所以

有一个.在正则表达式缺少的:grep '^flags.*:.*\blm\b' /proc/cpuinfo。同样,它只对我-q
有用,

@ byf-ferdy这不是一个缺失.:我有“零个或多个空格”,但实际上有一个制表符。我将正则表达式更改为也允许使用制表符。使用该-q标志时,没有输出,但是命令的退出状态告诉您该标志是否存在。如果要输出,请删除该-q标志。
吉尔(Gilles)'所以

@吉尔斯啊,我不知道那面-q旗帜。泰(Ty),现在开始工作:)
byf-ferdy 2014年

3

您可以使用uname -a并查找x86_64是否正在运行64位。别的(据我所知),并且您运行的是32位或您是在非PC硬件,如alphasparcppc64


3
还有什么,你正在运行32位,还是非PC硬件(如alphasparc64ppc64,...
吉尔“SO-停止作恶”

@吉尔斯:谢谢,我相应地编辑了答案。
Wuffers 2010年


1

类型:

uname -a

如果知道,x86_64 GNU/Linux您正在运行64位内核。如果您得到类似的信息,则i386/i486/i586/i686很可能正在运行32位内核


1
那不是问题。
harrymc

1

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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.