用于检测系统是 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 -m
:x86_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 脚本 [重复]的主要内容,如果未能解决你的问题,请参考以下文章
Linux查看所使用的Linux系统是32位还是64 位的方法