我想发现大量机器的机器结构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
为机器硬件名称