Що таке команда Linux, яку я можу запустити для програмного повернення або 32, або 64, щоб вказати, чи є процесор 32-бітним або 64-бітовим процесором?
Що таке команда Linux, яку я можу запустити для програмного повернення або 32, або 64, щоб вказати, чи є процесор 32-бітним або 64-бітовим процесором?
Відповіді:
Перевірте, чи є процесор 64-бітним, 32-розрядним чи здатним обидва, перевірте flags
рядок в /proc/cpuinfo
. Ви повинні знати можливі прапори вашої родини архітектури. Наприклад, на платформах i386 / amd64 lm
прапор ідентифікує процесори, що підтримують amd64 (CPU, у яких цього прапора немає, є лише 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-бітних програм без встановлення перехресної компіляції.
Ви можете побачити, що доступне в userland, запитуючи підтримку 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
прапора
.
: у мене було "нуль або більше пробілів", але насправді є вкладка. Я змінив regexp, щоб дозволити вкладки. З -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