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

Когда я ввожу 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, например: для какой архитектуры я собираю?

Решение

Попробуйте uname -m. Что является сокращением от uname --machine и выводит:

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

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

cat /proc/cpuinfo

или:

grep flags /proc/cpuinfo

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

lm ==> 64-bit processor

Или используя lshw (как упомянул ниже Rolf of Saxony), без sudo (только для поиска ширины процессора):

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

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

Комментарии (13)

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

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

uname -m

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

getconf LONG_BIT

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

Комментарии (6)

lscpu будет список этих среди другой информации, касающейся вашего процессора:

в

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...
Комментарии (1)

Еще одна полезная команда для легкого определения, как показано ниже:

Команды:

getconf LONG_BIT

Ответ:

  • 32, если ОС является 32-разрядным
  • 64, если ОС 64 бит
Комментарии (2)

Команда

$ arch    

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

$ uname -m

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

Комментарии (3)

Мне было интересно об этом специально для создания программного обеспечения в в 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 вообще перл).

Комментарии (3)
#include 

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}
Комментарии (2)

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

Комментарии (2)

Эта система 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
Комментарии (1)

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

в <предварительно>$ куб. -в 2>&1 | команда grep ^цель Цель: архитектуру x86_64-ПК-ОС Linux-Н. </пред>

Вы можете попробовать составить Привет, мир!:

в <предварительно>$ Эхо 'int основной() { вернуть 0; }' | СС -х с - -о Фу файл $ ФОО фу: эльф 64-битный исполняемый ЛСБ, для архитектуры x86-64, Версия 1 (с SysV), динамически связаны, переводчик /lib64/ЛД-ОС Linux для архитектуры x86-64.так.2, для GNU/Линукс 2.6.32, BuildID[в SHA1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, не раздели </пред>

Комментарии (2)

В отношении ответ на "getconf LONG_BIT на".

Я написал простую функцию, чтобы сделать это 'С':

/*
 * check_os_64bit
 *
 * Returns integer:
 *   1 = it is a 64-bit OS
 *   0 = it is NOT a 64-bit OS (probably 32-bit)
 *   < 0 = failure
 *     -1 = popen failed
 *     -2 = fgets failed
 *
 * **WARNING**
 * Be CAREFUL! Just testing for a boolean return may not cut it
 * with this (trivial) implementation! (Think of when it fails,
 * returning -ve; this could be seen as non-zero & therefore true!)
 * Suggestions?
 */
static int check_os_64bit(void)
{
    FILE *fp=NULL;
    char cb64[3];

    fp = popen ("getconf LONG_BIT", "r");
    if (!fp)
       return -1;

    if (!fgets(cb64, 3, fp))
        return -2;

    if (!strncmp (cb64, "64", 3)) {
        return 1;
    }
    else {
        return 0;
    }
}

Хорошая идея, 'getconf'!

Комментарии (5)

Вы также можете проверить с помощью переменной окружения:

echo $HOSTTYPE

Результат:

для i386 -> 32 бита

архитектуру x86_64 -> 64 бит

Добывается из: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html

Комментарии (1)

В bash, используя целочисленное переполнение:


if ((1 == 1
Комментарии (2)

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
Комментарии (0)

Если вы сдвиг 1 влево по 32 и вы получите 1, Ваша система является 32-разрядным. Если вы сдвиг 1 влево на 64, и вы получаете 1, Ваша система является 64-разрядной.

Другими словами,

если команда echo $((1<<32)) дает 1, то ваша система является 32-разрядным`.

`если команда echo $((1<<64)) дает 1, то ваша система является 64 битные.

Комментарии (3)

Простой скрипт, чтобы получить 64 бит или 32 бит

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
        else
            echo "32 bit system"
        fi
Комментарии (0)
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
Комментарии (1)

Я могу'т верю, что за все это время никто не упомянул:

sudo lshw -class cpu

чтобы получить подробную информацию о скорости, количества, размера и возможностей аппаратных средств процессора.

Комментарии (0)

[ -з uname-м | грэп 64] &ампер;&ампер; Эхо "32-разрядные и" и quot || Эхо &; 64-битный, что"

Основываясь на том, что 64-битных обычно x86_64 С и 32-бит i686 В и т. д.

Комментарии (0)

Если сильно ограничен в существующих двоичных файлов (например, в пакет initramfs), мои коллеги предложили:

$ ls -l /lib*/ld-linux*.so.2

На мой АЛТ систем Linux, для i586 и /Либ/ЛД-ОС Linux.так.2 и x86_64 есть/lib64/ЛД-ОС Linux для архитектуры x86-64.так.2`.

Комментарии (2)