Команда Linux для возврата количества бит (32 или 64)?

13

Какую команду Linux можно запустить для программного возврата 32 или 64, чтобы указать, является ли процессор 32-разрядным или 64-разрядным?

WilliamKF
источник
1
@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).

Жиль "ТАК - перестань быть злым"
источник
3
В системах 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.

Wuffers
источник
3
Все остальное , и вы используете 32-разрядную или аппаратное обеспечение не-PC (например alpha, sparc64, ppc64, ...
Жиля SO- перестать быть злом »
@ Жиль: Спасибо, я отредактировал свой ответ соответственно.
Вуфферс
1

Тип:

uname -a

Если вы получаете, x86_64 GNU/Linuxвы используете 64-битное ядро. Если вы получаете что-то похожее на i386/i486/i586/i686вас, скорее всего, вы используете 32-битное ядро

Путешествующий техник
источник
1
Это не вопрос.
harrymc
1

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
Рейчел Дункан
источник