Как узнать тип машины? - PullRequest
5 голосов
/ 27 января 2009

Я хотел бы узнать тип архитектуры машин для большого количества машин. У меня есть имя хоста каждой машины. Машины имеют 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, а также возвращает такие вещи, как «i686», когда машина на самом деле «x86_64», но операционная система 32-битная. / proc / cpuinfo тоже не работает, и все становится еще сложнее, потому что на некоторых машинах не установлен компилятор C (я уверен, что у них всех есть sh, возможно, python или perl, не знаю).

Спасибо заранее !! :)

Ответы [ 6 ]

17 голосов
/ 29 января 2009

arch ; uname -a

arch - это стандартный способ получить имя набора команд процессора. uname -a получает кучу материала об ОС. uname noth a получает имя ОС.

4 голосов
/ 27 января 2009

Вы можете попробовать следующие строки Perl:

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

Я знаю, что в Mac OS X Leopard с Perl 5.10.0 печатается «i386-darwin». Я не знаю, как в Perl получить реальное имя процессора - вероятно, лучшая ставка для вас - C, поскольку это довольно ограниченный набор возможностей. Вы можете получить предопределенные макросы компилятора C из Perl:

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

Здесь будут перечислены макросы C, такие как __LITTLE_ENDIAN__ и __MACH__ для формата Mach-O и __i386__ (по крайней мере, на Leopard), а также бесполезные, такие как __GNUC__ и __STDC__. Конечно, вся эта помощь предполагает, что у вас есть Perl на всех машинах. Если нет, я уверен, что на других языках есть аналогичные средства, чтобы помочь вам.

2 голосов
/ 27 января 2009

Почему / proc / cpuinfo не работает?

Я не знаю всех операционных систем, о которых вы упомянули, но я думаю, что они дают достаточно подробную информацию о Linux. По крайней мере, с моделью CPU, другая информация может быть найдена из таблицы данных.

Программное обеспечение может видеть только то, что ОС позволяет ему видеть, поэтому, если ОС не предоставляет информацию , такую ​​как / proc / cpuinfo, у вас не будет возможности узнать это. *

ответ на комментарии:

Я не говорю, ищите / proc / cpuinfo для всех ОС. Это двухэтапный метод: сначала вы узнаете, какую ОС он использует uname, а затем найдите конкретную позицию ОС для информации о процессоре.

2 голосов
/ 27 января 2009

Я бы посоветовал вам взглянуть на компонент facter системы Puppet. С URL http://reductivelabs.com/projects/facter/.

Кроссплатформенная библиотека Ruby для извлечения фактов из операционных систем. Поддерживает несколько механизмов разрешения, любой из которых может быть ограничен работой только в определенных операционных системах или средах. Facter особенно полезен для получения таких вещей, как имена операционных систем, IP-адреса, MAC-адреса и ключи SSH.
1 голос
/ 06 декабря 2011

Это не полный ответ, но он может помочь вам достичь вашей цели.

arch не работает в HP-UX Itanium и не имеет файловой системы / proc, как вы упомянули.

Это объясняет, как определить порядок байтов (порядок байтов), который O / S использует просто с командами оболочки. Он работает как минимум на 4 основных Unix (Linux x86_64, Solaris Sparc, AIX / Power, HP-UX Itanium). Если вы знаете порядок байтов, вы можете многое определить, с каким ЦП вы имеете дело, основываясь на этом источнике.

Например, если 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 голосов
/ 14 апреля 2013

Использование uname -a принесет вам много информации, поэтому вам придется искать информацию, которую вы хотите иметь.

Просто используйте:

uname -i

для аппаратной платформы

или

uname -m

для аппаратного наименования машины

...