Какую команду Linux я могу запустить, чтобы программно вернуть 32 или 64, чтобы указать, является ли процессор 32-битным или 64-битным процессором?
5 ответов
Вы можете увидеть, является ли ЦП 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)
.
Вы можете использовать uname -a
и найти x86_64
чтобы увидеть, работает ли у вас 64-битная версия. Что-нибудь еще (насколько я знаю), и вы работаете на 32-битной или не на ПК, например, alpha
, sparc
или ppc64
.
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
Тип:
uname -a
Если вы получаете x86_64 GNU/Linux
вы используете 64-битное ядро. Если вы получаете что-то похожее на i386/i486/i586/i686
вы, скорее всего, используете 32-битное ядро
uname -m | sed 's/x86_//;s/i[3-6]86/32/'