какую команду запускать в разных дистрибутивах?
"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 внутри флагов.
для 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-битный
64-битный
Чтобы запутать ситуацию, вы можете запустить 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.
Другой способ сделать это - спросить perl, какой компилятор сказал размер длинного целого числа:
$ perl -MConfig -e 'print $Config{longsize}*8 . "\n";'
64
vs.
$ 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
vs.
[...]
> EOC
$ gcc -Wall -o bits bits.c
$ ./bits
32
:-)
Как дубликат:
Linux + как проверить версию linux 32 бит или 64 бит
uname -m даст вам только работающую «арку» / архитектуру ядра. Он НЕ сообщит вам, используете ли вы 32-битный дистрибутив GNU / Linux на 64-битном процессоре.
Чтобы узнать возможности вашего процессора:
cat /proc/cpuinfo
Флаг «LM» должен присутствовать в 64-битных системах, поскольку он представляет «ДЛИННЫЙ РЕЖИМ» (64-битные расширения, AMD AMD64 или Intel EM64T).
$ uname -p
x86_64
Если у вас / usr / lib64, вы используете x86_64 ..
В команде Брэда Гилберта была ошибка Perl. Я исправил это, и команда ниже работает: cat / proc / cpuinfo | grep ^ flags | perl -e '$= <>; print ($? "x86_64 \ n": "не x86_64 \ n") '