Команда Linux повернути кількість біт (32 або 64)?


13

Що таке команда Linux, яку я можу запустити для програмного повернення або 32, або 64, щоб вказати, чи є процесор 32-бітним або 64-бітовим процесором?


1
@Sathya: Це не зовсім дублікат, тому що процесор може бути 64-розрядним, навіть якщо Linux не є.
Жил "ТАК - перестань бути злим"

Відповіді:


13
  • Перевірте, чи є процесор 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).


3
У системах GNU (та інших, якщо вони є) ви повинні мати можливість getconf WORD_BITабо getconf LONG_BITзамість того, щоб компілювати власну програму C (тривіальна та портативна, хоча вона є).
Призупинено до подальшого повідомлення.

@Dennis: Дякую за виправлення. Я не думав використовувати 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 Це не було відсутнім .: у мене було "нуль або більше пробілів", але насправді є вкладка. Я змінив regexp, щоб дозволити вкладки. З -qпрапором виходу немає, але статус виходу команди вказує, чи є прапор. Якщо ви хочете вивести, зніміть -qпрапор.
Жил "ТАК - перестань бути злим"

@Gilles ах, я не знав про -qпрапор. Тай, працює зараз :)
byf-ferdy

3

Ви можете використовувати uname -aі шукати, x86_64щоб перевірити, чи працює ви 64-бітний. Все інше (Наскільки я знаю) , і ви використовуєте 32-розрядну або ви на обладнанні , НЕ ПК , такі як alpha, sparcабо ppc64.


3
Все інше , і ви використовуєте 32-розрядну або апаратне забезпечення не-PC (наприклад alpha, sparc64, ppc64, ...
Жиля SO- перестати бути злом »

@Gilles: Дякую, я відповідно відредагував свою відповідь.
Wuffers


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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.