it-swarm-ru.tech

Как определить архитектуру ядра Linux?

uname -m дает i686 и uname -m выводит i686 i386 на машине Red Hat Enterprise Linux Server версии 5.4 (Tikanga). Мне нужно установить Oracle Database 10g Release 2 на эту машину. Итак, как я могу решить, является ли архитектура ядра 32-битной или 64-битной?

105
user2914

i386 и i686 являются 32-разрядными.
x86_64 является 64-битным

пример для 64 бит:

[email protected]:~$ uname -a  
Linux behrooz 2.6.32-5-AMD64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux

EDIT:
Смотрите мой linux ARM 32 или 64 бит? для ARM

99
Behrooz

Это просто! Используйте команду Arch.

49
PHPst

@ behrooz правильно. К сожалению, uname требует, чтобы вы знали архитектуры. На самом деле, я искал список архитектур и нашел эта статья , который отвечает на ваш вопрос. В связи с uname -m:

x86_64 GNU/Linux указывает, что у вас работает 64-битное ядро ​​Linux. Если вы используете см. I386/i486/i586/i686, то это 32-битное ядро.

Чтобы определить, может ли оборудование работать на 64-битном ядре

grep flags /proc/cpuinfo

Ищите следующее в выходных данных (все флаги получены из этот ответ stackoverflow для того же вопроса)

  • lm флаг означает процессор в длинном режиме - 64-битный процессор
  • tm флаг означает защищенный режим - 32-битный процессор
  • rm флаг означает Реальный режим - 16-битный процессор
32
xenoterracide

(РЕДАКТИРОВАТЬ: этот ответ НЕПРАВИЛЬНЫЙ. Благодаря комментарию @ Lizardx)

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

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

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

21
Luchostein

Для Debian:

На моем ПК

 ~> dpkg --print-архитектура 
 AMD64 
 ~> dpkg --print-foreign-architectures 
 i386 

Моя Малина Пи 2

 ~> dpkg --print-архитектура 
 armhf 
18
Артем Телешев

Самый простой способ - запустить:

getconf LONG_BIT

который выведет 64 или 32 в зависимости от того, 32 или 64 бита.

например:

[email protected]:~$ getconf LONG_BIT
64
13
dannyw

использовать syscap из проект Formake

syscap позволяет исследовать многие системные свойства и тестировать зависимости. Это портативный сценарий оболочки.

Получить архитектуру процессора:

syscap info -Arch

Получить имя и версию ядра:

syscap info -kernel -kernver
2
Alex

Другой способ - проверить архитектуру, для которой был скомпилирован системный файл, например

$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped
1
minaev

Или вы можете использовать способ внутренней команды name, если хотите реализовать что-то самостоятельно:

#include <sys/utsname.h>
#include <stdio.h>

int main() {
    struct utsname name;
    uname(&name);
    printf("%s\n",name.machine);
    return 0;
}
0
Meow

Вот еще один метод, использующий uname.

От man uname:

... -i, --hardware-platform print the hardware platform or "unknown" ...

# uname -i x86_64#

0
clusterdude

Если вы ищете простую однострочную версию, это самое надежное решение, которое я нашел, которое возвращает 64 или 2. Неважно, работает ли ARM или нет), и он должен работать в любой системе, использующей bash или sh.

Осторожно, это предполагает, что система является либо 32-битной, либо 64-битной. Смотрите мое объяснение ниже, если вам нужно обнаружить 8-16-битную или какую-то другую архитектуру.

[$ ((0xffffffff)) -eq -1] && echo 32 || эхо 64

Что здесь происходит?
Логика очень проста, и все сводится к тому, как компьютеры хранят целые числа со знаком. 32-битная архитектура имеет только 32 бита, которые она может использовать для хранения целых чисел со знаком, в то время как 64-битная архитектура имеет 64 бита! Другими словами, множество целых чисел, которые могут быть сохранены, конечно. Половина этого набора представляет отрицательные числа, а половина представляет положительные числа. Целое число со знаком, равное -1, представляется как наибольшее число, которое может быть сохранено в данном количестве битов для этой архитектуры. В 32-битной системе -1 может быть представлено шестнадцатеричным значением 0xFFFFFFFF (которое составляет 32 двоичных бита, все равны 1). В 64-битной системе 0xFFFFFFFF преобразуется в 4,294,967,295, основание 10, а 0xFFFFFFFFFFFFFFFF - представление для -1). Вы можете видеть, как это легко масштабируется для систем, которые также являются 8- или 16-битными, что будет равно -1 при 0xFF и 0xFFFF соответственно.

0
b_laoshi