Answers:
通过检查中的行,可以查看CPU是64位,32位还是两者均可用。您必须知道架构家族中可能的标记。例如,在i386 / amd64平台上,该标志标识支持amd64的CPU(不具有该标志的CPU仅限于i386)。flags
/proc/cpuinfo
lm
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
通过使用查询架构,可以查看内核是32位还是64位uname -m
。例如,i[3456]86
32位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 -m
report i386
。即使内核是64位内核,这也可以有效地使您假装自己在“ 32位系统”上,例如,无需设置交叉编译即可编译32位程序。
通过使用命令查询LSB支持,可以查看用户区中可用的内容lsb_release
。更精确地,lsb_release -s
打印:
支持的LSB功能的- 分隔列表。每个功能都有表格。例如,ix86 C库的可用性用表示,而amd64的类似物表示。但是,并不是每个发行版都声明所有可用的LSB模块,因此可用的可用空间可能比用这种方法检测到的更多。module-version-architecture
core-2.0-ia32
core-2.0-amd64
您可以通过编译打印sizeof(void*)
或的5行C程序来找出开发所需的字长(假设有C编译器可用)sizeof(size_t)
。
getconf WORD_BIT
或getconf LONG_BIT
不必编译自己的C程序(尽管是普通的和可移植的)。
getconf
在这里使用。原则上听起来不错,但是如果有多个(通常在Linux上为gcc / icc或类似的版本,在其他地方为gcc / native cc),则很难确保结果适用于要使用的特定C编译器。在标准系统上,getconf
应将其应用于c89
或c99
中$(getconf PATH)
,但实际上,我会担心有人安装cc
由供应商c89
包装程序运行的替代产品。
.
在正则表达式缺少的:grep '^flags.*:.*\blm\b' /proc/cpuinfo
。同样,它只对我-q
.
:我有“零个或多个空格”,但实际上有一个制表符。我将正则表达式更改为也允许使用制表符。使用该-q
标志时,没有输出,但是命令的退出状态告诉您该标志是否存在。如果要输出,请删除该-q
标志。
-q
旗帜。泰(Ty),现在开始工作:)
您可以使用uname -a
并查找x86_64
是否正在运行64位。别的(据我所知),并且您运行的是32位或您是在非PC硬件,如alpha
,sparc
或ppc64
。
alpha
,sparc64
,ppc64
,...
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