13

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

5 ответов5

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]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-битных программ без настройки кросс-компиляции.

  • Вы можете увидеть, что доступно в пользовательском пространстве, запросив поддержку LSB с помощью команды lsb_release . Точнее говоря, lsb_release -s печатает : -сепаратированный список поддерживаемых функций LSB. Каждая функция имеет форму module-version-architecture . Например, наличие библиотеки ix86 C указано в core-2.0-ia32 , а core-2.0-amd64 является аналогом для amd64. Однако не каждый дистрибутив объявляет все доступные модули LSB, поэтому может быть доступно больше, чем можно обнаружить таким образом.

  • Вы можете узнать предпочтительный размер слова для разработки (при условии, что доступен компилятор C), скомпилировав 5-строчную программу C, которая печатает sizeof(void*) или sizeof(size_t) .

3

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

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
1

Тип:

uname -a

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

1
uname -m | sed 's/x86_//;s/i[3-6]86/32/'

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .