如何确定计算机的型号?

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位时,“uname”会返回“i686”之类的结果。/proc/cpuinfo也无法满足要求,情况变得更加复杂,因为有些机器没有安装C编译器(我确信它们都有sh,也许还有Python或Perl,我不确定)。
谢谢! :)
6个回答

20

arch ; uname -a

arch是获取CPU指令集名称的标准方式。而uname -a会获取关于操作系统的一些信息。而不带a参数的uname命令则会获取操作系统的名称。

然而,从程序角度来说,与arch等效的命令为uname -m


架构?我不知道。我会尝试。 - Giovanni Funchal
没错,但是在一些非常老的系统上,uname -m无法工作。不幸的是,在Debian中缺少arch,因此您基本上必须尝试一个,如果出现错误,请尝试另一个。 - Joshua

4
你可以尝试以下的Perl一行代码:
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";'

这将列出像__LITTLE_ENDIAN____MACH__这样的C宏,用于Mach-O格式和__i386__(至少在Leopard上),以及无用的宏,例如__GNUC____STDC__。当然,所有这些帮助都假设您在所有计算机上都有Perl。如果没有,我相信其他语言也有类似的工具来帮助您。

在Centos 6.3 x64上,它打印出x86_64-linux - Cheeso

2
我建议您查看Puppet系统的facter组件。请访问以下链接:http://reductivelabs.com/projects/facter/
facter是一个跨平台的Ruby库,用于从操作系统中检索事实。它支持多种分辨率机制,其中任何一种都可以限制仅在某些操作系统或环境上工作。facte特别适用于检索操作系统名称、IP地址、MAC地址和SSH密钥等信息。

很可能机器上没有安装Ruby :( - Giovanni Funchal

2
为什么 /proc/cpuinfo 无法使用?
我不知道你提到的所有操作系统,但我认为它在Linux下提供了相当详细的信息。至少,可以从数据表中查找CPU型号和其他信息。
软件只能看到操作系统允许它看到的内容,因此如果操作系统不提供像 /proc/cpuinfo 这样的信息,则您将无法了解它。
回复评论:
我并不是说要在所有操作系统中查找 /proc/cpuinfo。这是一个两步方法:首先通过 uname 找出使用的操作系统,然后查找特定于该操作系统的位置以获取CPU信息。

阅读/proc/cpuinfo或运行dmidecode是确定您正在运行的处理器的唯一可靠方法。正如您所指出的,uname报告您正在运行的内核类型,并根据已安装的内核类型给出不同的结果。不确定osx或sun。 - stephen mulcahy
1
/proc文件系统是Linux的发明,在其他UNIX上不存在。 - Mike Heinz
2
好的,这不是Linux的发明,在其他Unix版本中也存在,但它通常包含有关进程的信息(因此它的名称),而不是随机的系统信息。因此,这不是问题的答案。 - matli

1

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

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

这篇文章解释了如何仅使用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位


0

使用uname -a命令会带来太多的信息,因此您需要搜索您想要的信息。

只需使用:

uname -i

针对硬件平台

或者

uname -m

用于机器硬件名称


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接