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

453
задан Swapnonil Mukherjee 29 окт. '08 в 9:59
источник поделиться
21 ответ

Попробуйте uname -m. Короткое значение uname --machine и выводится:

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

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

cat /proc/cpuinfo

или

grep flags /proc/cpuinfo

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

lm ==> 64-bit processor

Или используя lshw (как указано ниже Rolf of Saxony), без sudo (только для grepping cpu width):

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

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

715
ответ дан VonC 29 окт. '08 в 10:06
источник поделиться

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

Чтобы запустить ваше конкретное имя аппаратного оборудования

uname -m

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

getconf LONG_BIT

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

149
ответ дан Thomas Watnedal 29 окт. '08 в 10:06
источник поделиться

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

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...
42
ответ дан asharma 17 июля '12 в 5:00
источник поделиться

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

Команда:

getconf LONG_BIT

Ответ:

  • 32, если ОС 32 бит
  • 64, если ОС 64 бит
31
ответ дан user3207041 17 янв. '14 в 17:39
источник поделиться

Команда

$ arch    

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

$ uname -m

но в два раза быстрее, чем тип

12
ответ дан Greg von Winckel 16 июня '14 в 19:43
источник поделиться
#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}
12
ответ дан scotty 15 авг. '12 в 17:09
источник поделиться

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

Пакеты Debian сами должны знать, для какой архитектуры они предназначены (конечно), когда они фактически создают пакет со всеми его метаданными, включая архитектуру платформы, поэтому есть инструмент для упаковки, который выводит его для других инструментов и сценариев упаковки для используйте dpkg-architecture. Он включает в себя как то, что он настроил для сборки, так и текущий хост. (Обычно они одинаковы.) Пример вывода на 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 -architecture.

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

10
ответ дан Reed Hedges 11 авг. '11 в 21:18
источник поделиться

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

9
ответ дан Denis R. 29 окт. '08 в 10:09
источник поделиться

Эта система 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
5
ответ дан Louis Gerbarg 29 окт. '08 в 10:08
источник поделиться

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

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

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

$ 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
4
ответ дан ysdx 19 сент. '15 в 10:10
источник поделиться

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

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

/*
 * 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"!

4
ответ дан kaiwan 01 июня '11 в 14:38
источник поделиться

Вы также можете проверить использование переменной среды:

echo $HOSTTYPE

Результат:

i386 → 32 бит

x86_64 → 64 бит

Извлечен из: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html

3
ответ дан LinuxMaintwo 28 февр. '16 в 23:25
источник поделиться

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
2
ответ дан user5859111 07 февр. '16 в 1:22
источник поделиться

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

if ((1 == 1<<32)); then
  echo 32bits
else
  echo 64bits
fi

Это намного эффективнее вызова другого процесса или открытия файлов.

1
ответ дан Luchostein 10 нояб. '14 в 16:51
источник поделиться

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

sudo lshw -class cpu

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

1
ответ дан Rolf of Saxony 22 сент. '15 в 16:04
источник поделиться

Простой script для получения 64-битного или 32-битного

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
           else
            echo "32 bit system"
        fi
1
ответ дан lakshmikandan 06 июля '15 в 9:43
источник поделиться

[-z uname -m | grep 64] && & echo "32-bit" || echo "64-бит"

Исходя из того факта, что 64-разрядный, как правило, x86_64 и 32-разрядный - i686 и т.д.

1
ответ дан 79man 13 дек. '16 в 11:44
источник поделиться
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
1
ответ дан alex 11 июля '13 в 18:17
источник поделиться

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

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

В моих системах ALT Linux i586 имеет /lib/ld-linux.so.2, а x86_64 имеет /lib64/ld-linux-x86-64.so.2.

0
ответ дан Michael Shigorin 21 февр. '13 в 21:22
источник поделиться

Если вы сдвинете 1 на 32 и вы получите 1, ваша система будет 32 бит. Если вы переместили 1 на 64 и вы получили 1, ваша система будет 64 бит.

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

if echo $((1<<32)) gives 1 then your system is 32 bit.

if echo $((1<<64)) gives 1 then your system is 64 bit.

0
ответ дан Sandeep Giri 13 февр. '15 в 16:22
источник поделиться

Сначала вам нужно скачать Virtual Box. Затем выберите новый и 32-разрядный Linux. Затем загрузите Linux, используя его. Если он загружается, то он будет 32-битным, если он не будет тогда 64-разрядным.

-6
ответ дан Vikram Thaman 07 дек. '14 в 21:00
источник поделиться

Другие вопросы по меткам