Когда я ввожу 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
, например: для какой архитектуры я собираю?
Попробуйте uname -m
. Что является сокращением от uname --machine
и выводит:
x86_64 ==> 64-bit kernel
i686 ==> 32-bit kernel
В противном случае, не для ядра Linux, а для процессора, вы набираете:
cat /proc/cpuinfo
или:
grep flags /proc/cpuinfo
В параметре "флаги" вы увидите различные значения: см. "Что означают флаги в /proc/cpuinfo?"
Среди них один называется lm
: Long Mode
(x86-64: amd64, также известный как Intel 64, т.е. 64-битный)
lm ==> 64-bit processor
Или используя lshw
(как упомянул ниже Rolf of Saxony), без sudo
(только для поиска ширины процессора):
lshw -class cpu|grep "^ width"|uniq|awk '{print $2}'
Примечание: вы можете иметь 64-битный процессор с установленным 32-битным ядром.
(как упоминает ysdx в своем ответе, "Сейчас система может быть multiarch, так что это не имеет смысла. Возможно, вы захотите найти цель компилятора по умолчанию")
Если бы вы работали на 64-битной платформе, вы бы увидели x86_64 или что-то похожее в выводе uname -a
Чтобы получить имя аппаратного обеспечения вашей конкретной машины, выполните следующие действия
uname -m
Вы также можете вызвать
getconf LONG_BIT
который возвращает либо 32, либо 64
Еще одна полезная команда для легкого определения, как показано ниже:
Команды:
getconf LONG_BIT
Ответ:
Команда
$ arch
эквивалентно
$ uname -m
но в два раза быстрее набрать
Мне было интересно об этом специально для создания программного обеспечения в в Debian (установленная система Debian может быть 32-разрядной версии с 32 битное ядро, библиотеки и т. д. или это может быть 64-битная версия с материал скомпилирован для 64-бит вместо 32-битном режиме совместимости).
В Debian пакеты сами должны знать, что они для (Конечно же), когда они на самом деле создать пакет со всеми его метаданных, в том числе архитектуры платформы, так что есть упаковки средство, которое выводит его на другие упаковки инструментов и скриптов для использования, называется с dpkg-архитектура. Она включает в себя как, что это'ы настроены строить, а также текущего хоста. (Обычно это то же самое, хотя.) Пример выходных данных на 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-архитектуры.
Я понятия не имею, как dpkg-архитектура выводит архитектуру, но вы можете посмотреть его документацию или исходный код (с помощью dpkg-архитектура и системы с dpkg вообще перл).
Если у вас 64-разрядная ОС, вместо i686 в, у вас x86_64 С " или " для ia64в выходных данных выполнения команды
uname -а`. В том, что вы не имеете любой из этих двух строк; у вас 32-битная ОС (отметим, что это не означает, что ваш процессор не является 64-разрядной).
Эта система 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
В настоящее время, система может быть мультиархитектурный так это все равно не имеет смысла. Вы хотите найти объект по умолчанию компилятора:
в <предварительно>$ куб. -в 2>&1 | команда grep ^цель Цель: архитектуру x86_64-ПК-ОС Linux-Н. </пред>
Вы можете попробовать составить Привет, мир!:
в <предварительно>$ Эхо 'int основной() { вернуть 0; }' | СС -х с - -о Фу файл $ ФОО фу: эльф 64-битный исполняемый ЛСБ, для архитектуры x86-64, Версия 1 (с SysV), динамически связаны, переводчик /lib64/ЛД-ОС Linux для архитектуры x86-64.так.2, для GNU/Линукс 2.6.32, BuildID[в SHA1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, не раздели </пред>
В отношении ответ на "getconf LONG_BIT на".
Я написал простую функцию, чтобы сделать это 'С':
/*
* 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'!
Вы также можете проверить с помощью переменной окружения:
echo $HOSTTYPE
Результат:
для i386
-> 32 бита
архитектуру x86_64
-> 64 бит
Добывается из: http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html
В bash, используя целочисленное переполнение:
if ((1 == 1<<32)); then
echo 32bits
else
echo 64bits
fi
Это'ы гораздо более эффективным, чем вызов другого процесса или открытия файлов.
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
Если вы сдвиг 1 влево по 32 и вы получите 1, Ваша система является 32-разрядным. Если вы сдвиг 1 влево на 64, и вы получаете 1, Ваша система является 64-разрядной.
Другими словами,
если команда echo $((1<<32)) дает 1, то ваша система является 32-разрядным`.
`если команда echo $((1<<64)) дает 1, то ваша система является 64 битные.
Простой скрипт, чтобы получить 64 бит или 32 бит
if $(getconf LONG_BIT | grep '64'); then
echo "64 bit system"
else
echo "32 bit system"
fi
Я могу'т верю, что за все это время никто не упомянул:
sudo lshw -class cpu
чтобы получить подробную информацию о скорости, количества, размера и возможностей аппаратных средств процессора.
[ -з uname-м
| грэп 64] &ампер;&ампер; Эхо "32-разрядные и" и quot || Эхо &; 64-битный, что"
Основываясь на том, что 64-битных обычно x86_64 С
и 32-бит i686 В
и т. д.
Если сильно ограничен в существующих двоичных файлов (например, в пакет initramfs), мои коллеги предложили:
$ ls -l /lib*/ld-linux*.so.2
На мой АЛТ систем Linux, для i586 и /Либ/ЛД-ОС Linux.так.2
и x86_64 есть/lib64/ЛД-ОС Linux для архитектуры x86-64.так.2`.