@Sathya: Это не совсем дубликат, потому что процессор может быть 64-битным, даже если Linux нет.
Жиль "ТАК ... перестать быть злым"
Ответы:
13
Вы можете увидеть, является ли ЦП 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]8632-битные, а x86_6464-битные. Обратите внимание, что на некоторых архитектурах 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-architecturecore-2.0-ia32core-2.0-amd64
Вы можете узнать предпочтительный размер слова для разработки (при условии, что доступен компилятор C), скомпилировав 5-строчную программу C, которая печатает sizeof(void*)или sizeof(size_t).
В системах GNU (и других, если они есть) вы должны быть в состоянии сделать 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флага
byf-ferdy
@ byf-ferdy Это не было пропущено .: у меня было «ноль или больше пробелов», но на самом деле есть вкладка. Я также изменил регулярное выражение, чтобы разрешить вкладки. С -qфлагом нет вывода, но состояние выхода команды говорит вам, присутствует ли флаг. Если вы хотите вывод, уберите -qфлаг.
Жиль "ТАК ... перестать быть злым"
@ Жиль, а я не знал про -qфлаг. Тай, работает сейчас :)
byf-ferdy
3
Вы можете использовать uname -aи искать, x86_64если вы используете 64-разрядную версию. Все остальное (Насколько я знаю) , и вы используете 32-разрядную или вы на оборудовании , не ПК , такие как alpha, sparcили ppc64.
Если вы получаете, x86_64 GNU/Linuxвы используете 64-битное ядро. Если вы получаете что-то похожее на i386/i486/i586/i686вас, скорее всего, вы используете 32-битное ядро
Ответы:
Вы можете увидеть, является ли ЦП 64-битным, 32-битным, или способным к обоим, проверив
flags
строку в/proc/cpuinfo
. Вы должны знать возможные флаги в вашей архитектурной семье. Например, на платформах i386 / amd64lm
флаг определяет процессоры с поддержкой amd64 (процессоры, не имеющие этого флага, предназначены только для i386).Вы можете увидеть, является ли ядро 32-битным или 64-битным, запросив архитектуру с помощью
uname -m
. Например,i[3456]86
32-битные, аx86_64
64-битные. Обратите внимание, что на некоторых архитектурах 64-битное ядро может запускать 32-битные пользовательские программы, поэтому даже еслиuname -m
показано 64-битное ядро, нет гарантии, что 64-битные библиотеки будут доступны.Обратите внимание также, что
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
, ...источник
Тип:
Если вы получаете,
x86_64 GNU/Linux
вы используете 64-битное ядро. Если вы получаете что-то похожее наi386/i486/i586/i686
вас, скорее всего, вы используете 32-битное ядроисточник
getconf использует наименьшее количество системных вызовов:
источник