Как я узнаю, что у меня 32-битная или 64-битная версия Linux?

Какой будет команда для запуска в разных дистрибутивах?

10 ответов

Решение

"uname -m" - это команда, которую вы ищете. Вы можете запускать как 32-битные, так и 64-битные на современных процессорах Intel и AMD, так что "uname -p" вам не поможет (кроме того, в основном это не работает в наши дни, здесь Core2 считает ответ на "uname -p"). "неизвестно").

Поиск существования / usr / lib64 (как было предложено) вам тоже не поможет, поскольку некоторые пакеты, относящиеся к оборудованию и системе, будут устанавливать 32-битные и 64-битные библиотеки, чтобы быть в безопасности. В моей системе (Debian) пакет fakeroot делает именно это.

Что касается вывода "uname -m", если это i386 или i686, то это 32-битная версия, если это x86_64 (или альфа, или ia64, или какая-то другая 64-битная архитектура, которую я никогда не видел:), это 64-битная.

(как забавно, мой 64-битный сервер FreeBSD возвращает "amd64", что может быть немного странно для Intel Quadcore, но вполне понятно, если вы знаете историю 64-битной архитектуры x86)

uname -a и ищите x86_64. Если вы хотите знать, может ли ваш процессор обрабатывать 64 бита, cat /proc/cpuinfo и ищите lm в пределах флагов.

Просто чтобы запутать вещи, вы можете запустить 64-битное ядро ​​с 32-битным пользовательским пространством, что я и делаю. В этом случае, uname -m возвращается x86_64 но у меня не установлены 64-битные библиотеки, поэтому большинство 64-битных программ не запускаются.

Так что, как только вы проверите uname, вам нужно искать /lib64/ld-linux-x86-64.so.2, /lib64/libc-2.7.so а также /lib/ld-linux.so.2, /lib/libc-2.7.so чтобы увидеть, доступны ли 64-битные и 32-битные библиотеки. И чтобы действительно убедиться, запустите эти файлы и посмотрите, правильно ли они работают.

Еще одна полезная информация - это вывод lsb_release -a который является кросс-дистрибутивным и сообщит, какие архитектурно-ориентированные модули LSB доступны.

$> getconf LONG_BITОтвет: 32 или 64.

Для RedHat / CentOS:

$ uname -a
Linux cs-centos 2.6.18-92.1.22.el5 #1 SMP Tue Dec 16 12:03:43 EST 2008 i686 athlon i386 GNU/Linux

32-битный

  • i686 и / или i386

64-битный

  • будет иметь x86_64 в выводе uname -a

Еще один способ сделать это - спросить Perl, какой компилятор сказал, что размер длинного целого числа:

$ perl -MConfig -e 'print $Config{longsize}*8 . "\n";'
64

против

$ perl -MConfig -e 'print $Config{longsize}*8 . "\n";'
32

Или, если у вас установлен gcc, то же самое в C:

$ cat > bits.c <<EOC
> #include <stdlib.h>
> #include <stdio.h>
> 
> int main(void) {
>    printf("%d\n", (int)sizeof(long)*8);
> 
>    exit(0);
> }
> EOC
$ gcc -Wall -o bits bits.c
$ ./bits
64

против

[...]
> EOC
$ gcc -Wall -o bits bits.c
$ ./bits
32

:-)

Как дубликат:

Linux + как проверить версию 32-битной или 64-битной Linux

uname -m выдаст вам только запущенную архитектуру / архитектуру ядра. Он НЕ скажет вам, используете ли вы 32-битный дистрибутив GNU/Linux на 64-битном процессоре.

Чтобы узнать ваши возможности процессора:

 cat /proc/cpuinfo

Флаг "LM" должен присутствовать в 64-битных системах, поскольку он представляет "LONG MODE" (64-битные расширения, AMD64 или Intel EM64T).

$ uname -p

x86_64

У команды Брэда Гилберта была ошибка perl. Я исправил это, и работает следующая команда: cat / proc / cpuinfo | grep ^ flags | perl -e '$=<>; print ($? "x86_64 \ n": "not x86_64 \ n")'

Если у вас есть /usr/lib64, вы используете x86_64..

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