Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

uname -m

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

getconf LONG_BIT

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

Ответ 3

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

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...

Ответ 4

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

Команда:

getconf LONG_BIT

Ответ:

  • 32, если ОС 32 бит
  • 64, если ОС 64 бит

Ответ 5

#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}

Ответ 6

Команда

$ arch    

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

$ uname -m

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

Ответ 7

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

Ответ 8

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

Ответ 9

Эта система 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

Ответ 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"!

Ответ 11

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

$ 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

Ответ 13

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

Ответ 14

$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set

Ответ 15

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

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

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

Ответ 16

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

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
           else
            echo "32 bit system"
        fi

Ответ 17

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

sudo lshw -class cpu

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

Ответ 18

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

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

Ответ 19

Если кто-то сильно ограничен в доступных двоичных файлах (например, в 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.

Ответ 20

Если вы сдвинете 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.

Ответ 21

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