【问题标题】:Shell script to detect if system is a 32-bit or 64-bit [duplicate]用于检测系统是 32 位还是 64 位的 Shell 脚本 [重复]
【发布时间】: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 是否适用于两个平台?
  • 您需要了解 32 位与 64 位的哪些方面?有 64 位系统可以运行 32 位或 64 位程序。您可以拥有一个能够运行 32 位或 64 位的 CPU,并且引导的操作系统可能是 32 位内核或 64 位内核。

标签: linux shell


【解决方案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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-01
    • 2010-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多