8

我想发现大量机器的机器架构类型。我有每台机器的主机名。这些机器有 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,不知道)。

提前致谢!!:)

4

6 回答 6

20

arch ; uname -a

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

但是从编程上讲,相当于archis uname -m

于 2009-01-29T04:46:41.977 回答
4

您可以尝试以下 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";'

这将列出Mach-O 格式和(至少在 Leopard 上) 之类的 C 宏,以及像and__LITTLE_ENDIAN__之类的无用宏。当然,所有这些帮助都假设您在所有机器上都安装了 Perl。如果没有,我相信其他语言也有类似的工具可以帮助你。__MACH____i386____GNUC____STDC__

于 2009-01-26T21:25:55.563 回答
2

我建议您查看 Puppet 系统的 facter 组件。从 URL http://reducinglabs.com/projects/facter/

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

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

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

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

回复评论:

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

于 2009-01-26T21:45:45.617 回答
1

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

arch 不适用于 HP-UX Itanium,并且它没有 /proc 文件系统,正如您所提到的。

解释了如何简单地通过 shell 命令确定 O/S 使用的字节顺序(字节顺序)。它至少适用于 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

于 2011-12-06T19:01:19.400 回答
0

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

只需使用:

uname -i

对于硬件平台

或者

uname -m

机器硬件名称

于 2013-04-14T16:20:49.463 回答