我想发现大量机器的机器架构类型。我有每台机器的主机名。这些机器有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)。
提前致谢!! :)
答案 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
表示机器硬件名称