如何发现机器类型?

时间:2009-01-26 21:09:25

标签: linux macos shell scripting solaris

我想发现大量机器的机器架构类型。我有每台机器的主机名。这些机器有Debian 4 linux,SunOS 9,SunOS 10或Apple Darwin。所有这些都是类似unix的,但差别很小。

我想知道: - 架构(x86,x86_64,ia64,sparc,powerpc ......) - 处理器类型(intel pentium,pentium pro,pentium II,sparc,powerpc,itanium,athlon,core 2 duo,cytrix等...) - 处理器数量

当心,我想要机器的“类​​型”。使用'uname'的愚蠢方法对Sun不起作用,当机器实际上是'x86_64'但操作系统是32位时,它也返回'i686'之类的东西。 / proc / cpuinfo也不起作用,事情变得更复杂,因为有些机器没有安装C编译器(我确定它们都有sh,可能是python或perl,dunno)。

提前致谢!! :)

6 个答案:

答案 0 :(得分:17)

arch ; uname -a

arch是获取CPU指令集名称的标准方法。 uname -a获得了一些关于操作系统的东西。没有a的uname获取操作系统名称。

答案 1 :(得分:4)

您可以尝试以下Perl one-liner:

perl -MConfig -e 'print "$Config{myarchname}\n";'

我知道在Mac OS X Leopard上使用Perl 5.10.0打印“i386-darwin”。我不知道在Perl中获取实际处理器名称的方法 - 你最好的选择可能是C,因为它是一组相当有限的可能性。您可以从Perl获取C编译器的预定义宏:

perl -MConfig -e 'print join("\n", split(/ /, $Config{cppsymbols})), "\n";'

这将为Mach-O格式和__LITTLE_ENDIAN__(至少在Leopard上)列出__MACH____i386__等C宏,以及__GNUC__等无用的宏。和__STDC__。当然,所有这些帮助都假定您在所有计算机上都安装了Perl。如果没有,我相信其他语言也有类似的设施来帮助你。

答案 2 :(得分:2)

我建议你看一下Puppet系统的facter组件。来自网址http://reductivelabs.com/projects/facter/

一个跨平台的Ruby库,用于从操作系统中检索事实。支持多种解析机制,其中任何一种都可以限制为仅在某些操作系统或环境中工作。 Facter对于检索操作系统名称,IP地址,MAC地址和SSH密钥等内容特别有用。

答案 3 :(得分:2)

为什么/ proc / cpuinfo不起作用?

我不知道你提到的所有操作系统,但我认为它在Linux下提供了非常详细的信息。至少,使用CPU模型,可以从数据表中查找其他信息。

该软件只能看到操作系统可以看到的内容,因此如果操作系统不提供类似 / proc / cpuinfo的信息,那么你将无法知道它。< / p>

回复评论:

我不是说为所有操作系统寻找/ proc / cpuinfo。这是一个两步法:首先你找出使用uname的操作系统,然后查找cpu信息的操作系统特定位置。

答案 4 :(得分:1)

这不是一个完整的答案,但它可以帮助您实现目标。

arch在HP-UX Itanium上不起作用,并且它没有/ proc文件系统,正如您所提到的那样。

This解释了如何使用shell命令确定O / S正在使用的字节顺序(字节顺序)。它适用于至少4个主要的Unix(Linux x86_64,Solaris Sparc,AIX / Power,HP-UX Itanium)。如果您知道字节顺序,则可以根据this来源推断出您正在处理的CPU的很多内容。

例如,如果Solaris不会告诉你正确的架构,但你发现它是大端,你至少知道你不是在x86_64上,可能是Sparc。

最后,对于Sparc,您可以这样做以确定操作系统是以32位还是64位模式运行:

# isalist -v
sparcv9+vis2 sparcv9+vis sparcv9 sparcv8plus+vis2 sparcv8plus+vis sparcv8plus sparcv8 sparcv8-fsmuld sparcv7 sparc

如果它是'sparcv9'那么它是64位,sparcv8是32

答案 5 :(得分:0)

使用uname -a会为您提供更多信息,因此您必须搜索您想要的信息。

只需使用:

uname -i

用于硬件平台

uname -m

表示机器硬件名称