Как определить, является ли данный Linux 32-битным или 64-битным? - PullRequest
466 голосов
/ 29 октября 2008

Когда я набираю uname -a, это дает следующий вывод.

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux

Как я могу узнать из этого, что данная ОС является 32- или 64-битной?

Это полезно при написании configure скриптов, например: для какой архитектуры я строю?

Ответы [ 21 ]

731 голосов
/ 29 октября 2008

Попробуйте uname -m. Что не хватает uname --machine и выдает:

x86_64 ==> 64-bit kernel
i686   ==> 32-bit kernel

В противном случае не для ядра Linux, а для процессора , введите:

cat /proc/cpuinfo

или

grep flags /proc/cpuinfo

Под параметром "flags" вы увидите различные значения: см. " Что означают флаги в / proc / cpuinfo? " Среди них одно имя lm: Long Mode ( x86-64 : amd64, также известный как Intel 64, то есть 64-разрядный)

lm ==> 64-bit processor

или с использованием lshw (как упомянуто ниже по Саксонский Рольф ), без sudo (только для уменьшения ширины процессора):

lshw -class cpu|grep "^       width"|uniq|awk '{print $2}'

Примечание: у вас может быть 64-битный процессор с установленным 32-битным ядром .
(как ysdx упоминает в его / ее собственный ответ , "В настоящее время система может быть многоархитивной , так что она все равно не имеет смысла . Возможно, вы захотите найти цель компилятора по умолчанию ")

153 голосов
/ 29 октября 2008

Если бы вы работали на 64-битной платформе, вы бы увидели x86_64 или что-то очень похожее в выводе uname -a

Чтобы получить название вашего конкретного компьютера, запустите

uname -m

Вы также можете позвонить

getconf LONG_BIT

, который возвращает 32 или 64

42 голосов
/ 17 июля 2012

lscpu перечислит их среди другой информации о вашем процессоре:

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...
33 голосов
/ 17 января 2014

Другая полезная команда для легкого определения приведена ниже:

Команда:

getconf LONG_BIT

Ответ:

  • 32, если ОС 32-разрядная
  • 64, если ОС 64-разрядная
12 голосов
/ 16 июня 2014

Команда

$ arch    

эквивалентно

$ uname -m

но в два раза быстрее набрать

11 голосов
/ 15 августа 2012
#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}
11 голосов
/ 11 августа 2011

Мне было интересно узнать об этом специально для сборки программного обеспечения в Debian (установленная система Debian может быть 32-битной версией с 32-битным ядром, библиотеками и т. Д., Или это может быть 64- битовая версия с материалами, скомпилированными для 64-битного, а не 32-битного режима совместимости).

Пакеты Debian сами должны знать, для какой они архитектуры (разумеется), когда они фактически создают пакет со всеми его метаданными, включая архитектуру платформы, поэтому существует инструмент упаковки, который выводит его для других инструментов упаковки и сценариев, чтобы использовать, называется dpkg-архитектура . Он включает в себя как то, для чего он настроен, так и текущий хост. (Обычно это то же самое.) Пример вывода на 64-битной машине:

DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_OS=linux
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu

Вы можете распечатать только одну из этих переменных или выполнить проверку их значений с помощью параметров командной строки для dpkg -архитектуры.

Я понятия не имею, как архитектура dpkg выводит архитектуру, но вы можете посмотреть ее документацию или исходный код (архитектура dpkg и большая часть системы dpkg в целом являются Perl).

10 голосов
/ 29 октября 2008

Если у вас 64-битная ОС, а не i686, у вас x86_64 или ia64 на выходе uname -a. В том, что у вас нет ни одной из этих двух строк; у вас 32-битная ОС (обратите внимание, что это не означает, что ваш процессор не 64-битный).

6 голосов
/ 29 октября 2008

Эта система 32-битная. iX86 в uname означает, что это 32-разрядная архитектура. Если бы он был 64-битным, он вернул бы

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 x86_64 i686 x86_64 x86_64 GNU/Linux
6 голосов
/ 19 сентября 2015

В настоящее время система может быть многоархивной, поэтому в любом случае это не имеет смысла. Возможно, вы захотите найти цель компилятора по умолчанию:

$ cc -v 2>&1 | grep ^Target
Target: x86_64-pc-linux-gn

Вы можете попытаться скомпилировать привет мир:

$ echo 'int main() { return 0; }' | cc -x c - -o foo
$ file foo
foo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, not stripped
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...