Ответы:
Вы можете увидеть, является ли ЦП 64-битным, 32-битным, или способным к обоим, проверив flags
строку в /proc/cpuinfo
. Вы должны знать возможные флаги в вашей архитектурной семье. Например, на платформах i386 / amd64 lm
флаг определяет процессоры с поддержкой amd64 (процессоры, не имеющие этого флага, предназначены только для i386).
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
Вы можете увидеть, является ли ядро 32-битным или 64-битным, запросив архитектуру с помощью uname -m
. Например, i[3456]86
32-битные, а x86_64
64-битные. Обратите внимание, что на некоторых архитектурах 64-битное ядро может запускать 32-битные пользовательские программы, поэтому даже если uname -m
показано 64-битное ядро, нет гарантии, что 64-битные библиотеки будут доступны.
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
Обратите внимание также, что uname -m
может возвращать «виртуализированное» значение. Например, в Linux, если вы работаете setarch i386 bash
в системе amd64 и запускаете uname -m
из этого bash, вы увидите uname -m
отчеты i386
. Это фактически позволяет вам делать вид, что вы работаете в «32-битной системе», даже если ядро 64-битное, например, для компиляции 32-битных программ без настройки кросс-компиляции.
Вы можете увидеть, что доступно в пользовательском пространстве, запросив поддержку LSB с помощью lsb_release
команды. Точнее, lsb_release -s
печатает :
разделенный список поддерживаемых функций LSB. Каждая функция имеет форму . Например, доступность библиотеки ix86 C указывается как , в то время как аналог amd64. Однако не каждый дистрибутив объявляет все доступные модули LSB, поэтому может быть доступно больше, чем можно обнаружить таким образом.module-version-architecture
core-2.0-ia32
core-2.0-amd64
Вы можете узнать предпочтительный размер слова для разработки (при условии, что доступен компилятор C), скомпилировав 5-строчную программу C, которая печатает sizeof(void*)
или sizeof(size_t)
.
getconf WORD_BIT
или getconf LONG_BIT
вместо того, чтобы скомпилировать свою собственную программу на C (тривиальную и переносимую, хотя это так).
getconf
здесь. В принципе это звучит неплохо, но трудно гарантировать, что результаты применимы к конкретному компилятору C, который вы будете использовать, если их несколько (обычно gcc / icc или аналогичный в Linux, gcc / native cc в других местах). В стандартной системе getconf
следует применять к c89
или c99
в $(getconf PATH)
, но на практике я бы беспокоился о том, чтобы кто-то устанавливал альтернативу, cc
которой управляет c89
оболочка поставщика .
.
отсутствует в регулярном выражении: grep '^flags.*:.*\blm\b' /proc/cpuinfo
. Также это работает только для меня без -q
флага
.
: у меня было «ноль или больше пробелов», но на самом деле есть вкладка. Я также изменил регулярное выражение, чтобы разрешить вкладки. С -q
флагом нет вывода, но состояние выхода команды говорит вам, присутствует ли флаг. Если вы хотите вывод, уберите -q
флаг.
-q
флаг. Тай, работает сейчас :)
Вы можете использовать uname -a
и искать, x86_64
если вы используете 64-разрядную версию. Все остальное (Насколько я знаю) , и вы используете 32-разрядную или вы на оборудовании , не ПК , такие как alpha
, sparc
или ppc64
.
alpha
, sparc64
, ppc64
, ...
Тип:
uname -a
Если вы получаете, x86_64 GNU/Linux
вы используете 64-битное ядро. Если вы получаете что-то похожее на i386/i486/i586/i686
вас, скорее всего, вы используете 32-битное ядро
getconf использует наименьшее количество системных вызовов:
$ strace getconf LONG_BIT | wc -l
253
$ strace arch | wc -l
280
$ strace uname -m | wc -l
281
$ strace grep -q lm /proc/cpuinfo | wc -l
301