用于检测系统是 32 位还是 64 位的 Shell 脚本 [重复]

Posted

技术标签:

【中文标题】用于检测系统是 32 位还是 64 位的 Shell 脚本 [重复]【英文标题】:Shell script to detect if system is a 32-bit or 64-bit [duplicate] 【发布时间】:2012-08-28 09:05:58 【问题描述】:

可能重复:How to determine whether a given Linux is 32 bit or 64 bit?

有谁知道如何创建一个 shell 脚本 sh 文件,如果它是 64 位系统,它可以 shell 一个程序,如果它是一个 32 位系统,它可以 shell 另一个程序? 非常感谢。

【问题讨论】:

你到底想做什么?如果我们知道实际问题是什么,我们或许可以帮助您提供更好的整体解决方案...... uname -i 是否适用于两个平台? unix.stackexchange.com/questions/12453/… 您需要了解 32 位与 64 位的哪些方面?有 64 位系统可以运行 32 位或 64 位程序。您可以拥有一个能够运行 32 位或 64 位的 CPU,并且引导的操作系统可能是 32 位内核或 64 位内核。 【参考方案1】:
if $(uname -m | grep '64'); then
  echo "ARCH: 64-bit"
else
  echo "ARCH: 32-bit"
fi

【讨论】:

这对我不起作用——我得到的只是一个 shell 提示符:$。但是,简单的字符串比较可以解决问题: if [ "$(uname -m | grep '64')" != "" ];那么【参考方案2】:

试试uname -mx86_64是64位内核,i686是32位内核。基于此,您可以调用一个程序或另一个程序。

【讨论】:

这仅在 x86 上有效,不过... 这在我的 32 位机器上对我有用。 @squiguy:只要您在 x86 平台上,它就可以工作。 @thkala 我明白了,我登录到远程 32 位机器。我很抱歉。 另外,您可能正在运行“通用”x86 内核,而不是 i686 内核。您必须测试各种不同的字符串。【参考方案3】:

(回应 thkala 的评论。)

if echo __SIZEOF_POINTER__ | cpp -E - - | grep '^8$' >/dev/null; then
    do_stuff
fi

不太可能在任何地方都可以工作,但如果 cpp 来自 GCC,它就可以工作。具有检测任何 64 位架构的优势,而不仅仅是 x64(POWER、SPARC、IA64 等)。

【讨论】:

我在考虑检查sizeof(void *) 的值,但这需要一个编译器,并且与在一些随机系统二进制文件上运行file 一样可靠...【参考方案4】:

如果您想知道处理器是否是 64 位而不是内核,您可以在系统上搜索长模式 (-lm) 标志。它将出现在 64 位上,而不是 32 位上:

cat /proc/cpuinfo | grep lm

【讨论】:

以上是关于用于检测系统是 32 位还是 64 位的 Shell 脚本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

32位和64位有啥区别 32位和64位区别都有哪些

win10如何查看电脑是32位还是64位的系统

电脑32位和64位有啥区别 电脑32位和64位的区别

Linux查看所使用的Linux系统是32位还是64 位的方法

64位系统下,一个32位的程序究竟可以申请到多少内存,4GB还是更多

python32位和64位有啥区别?