Що таке команда 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_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-бітних програм без встановлення перехресної компіляції.
Ви можете побачити, що доступне в userland, запитуючи підтримку 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).
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