Как определить, является ли данный 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 ]

5 голосов
/ 01 июня 2011

Относительно ответ "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 голосов
/ 28 февраля 2016

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

echo $HOSTTYPE

Результат:

i386 -> 32 бита

x86_64 -> 64 бита

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

3 голосов
/ 10 ноября 2014

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

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

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

3 голосов
/ 07 февраля 2016

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 голосов
/ 13 февраля 2015

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

1 голос
/ 13 декабря 2016

[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"

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

1 голос
/ 21 февраля 2013

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

1 голос
/ 22 сентября 2015

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

sudo lshw -class cpu

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

1 голос
/ 11 июля 2013
$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set
1 голос
/ 06 июля 2015

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

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
        else
            echo "32 bit system"
        fi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...