如何发现机器types?

我想发现大量机器的机器结构types。 我有每台机器的主机名。 这些机器有Debian 4 Linux,SunOS 9,SunOS 10或Apple Darwin。 所有的都是类似unix的,但是有一点点不同。

我想知道: – 架构(x86,x86_64,ia64,sparc,powerpc …) – 处理器types(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,不知道)。

提前致谢!! 🙂

arch ; uname -a

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

你可以尝试下面的Perl一行:

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

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

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

这将列出像__LITTLE_ENDIAN__宏,如__LITTLE_ENDIAN____MACH__ Mach-O格式和__i386__ (至少在Leopard上),以及像__GNUC____STDC__无用的__STDC__ 。 当然,所有这些帮助都假定你在所有的机器上都有Perl。 如果没有,我相信其他语言也有类似的设施来帮助你。

我建议你看一下Puppet系统的facter组件。 从URL http://reductivelabs.com/projects/facter/

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

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

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

该软件只能看到操作系统让它看到的东西,所以如果操作系统不提供 / proc / cpuinfo 这样的信息,那么你将无法知道它。

回复评论:

我不是说为所有的操作系​​统寻找/ proc / cpuinfo。 这是一个两步骤的方法:首先你找出它使用的是哪个操作系统,然后查找操作系统的具体位置的CPU信息。

这不是一个完整的答案,但它可以帮助你达到你的目标。

arch不能在HP-UX Itanium上运行,而且它没有/ proc文件系统,正如你所提到的那样。

这解释了如何确定O / S使用shell命令简单地使用的字节顺序(字节顺序)。 它至少可以在4个主要的Unix(Linux x86_64,Solaris Sparc,AIX / Power,HP-UX Itanium)上运行。 如果你知道字节排序,你可以根据这个来源推断出你处理的是哪个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

使用uname -a会给你带来很多信息,所以你必须搜索你想要的信息。

只要使用:

 uname -i 

为硬件平台

要么

 uname -m 

为机器硬件名称