Как определить, является ли данный Linux 32 бит или 64 бит?
когда я типа 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 ответов:
попробовать
uname -m. Чего не хватаетuname --machineи он выводит:x86_64 ==> 64-bit kernel i686 ==> 32-bit kernel
иначе не для ядра Linux, а для процессора, вы типа:
cat /proc/cpuinfoили:
grep flags /proc/cpuinfoпод параметром " flags "вы увидите различные значения: см."что означают флаги в /proc / cpuinfo?" Среди них, один из них называется
lm:Long Mode( x86-64: amd64, также известный как Intel 64, т. е. 64-разрядный)lm ==> 64-bit processorили используя
lshw(как указано ниже by Рольф Саксонии), безsudo(только для захвата ширины процессора):lshw -class cpu|grep "^ width"|uniq|awk '{print }'Примечание: Вы можете иметь 64-разрядный процессор с 32-разрядным ядром, установленных.
(как ysdx упоминает в свой ответ, "в настоящее время, система может быть multiarch так это не в любом случае имеет смысл. Возможно, вы захотите найти цель компилятора по умолчанию")
если бы вы работали на 64-битной платформе, вы бы увидели x86_64 или что-то очень похожее на выходе из uname - a
чтобы запустить ваше конкретное аппаратное имя машины
uname -mвы также можете позвонить
getconf LONG_BITкоторый возвращает либо 32, либо 64
lscpuперечислит их среди другой информации, касающейся вашего процессора:Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit ...
еще одна полезная команда для легкого определения, как показано ниже:
:getconf LONG_BITответ:
- 32, если ОС 32 бит
- 64, если ОС 64 бита
мне было интересно об этом специально для создания программного обеспечения в 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 в целом являются Perl).
Если у вас 64-битная ОС, вместо i686, у вас есть
x86_64илиia64производстваuname -a. В том, что у вас нет ни одной из этих двух строк; у вас есть 32-разрядная ОС (обратите внимание, что это не означает, что ваш процессор не 64-разрядный).
эта система 32bit. iX86 in
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
в настоящее время, система может быть мультиархитектурный так это все равно не имеет смысла. Возможно, вы захотите найти цель компилятора по умолчанию:
$ cc -v 2>&1 | grep ^Target Target: x86_64-pc-linux-gnвы можете попробовать скомпилировать hello world:
$ echo 'int main() { return 0; }' | cc -x c - -o foo $ file foo foo: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=b114e029a08abfb3c98db93d3dcdb7435b5bba0c, not stripped
С уважением ответ "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'!
вы также можете проверить с помощью переменной среды:
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
если он сильно ограничен в доступных двоичных файлах (например, в 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 влево на 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.
Я не могу поверить, что за все это время никто не упомянул:
sudo lshw -class cpuчтобы получить подробную информацию о скорости, количестве, размере и возможностях аппаратного обеспечения процессора.
простой скрипт, чтобы получить 64 бит или 32 бит
if $(getconf LONG_BIT | grep '64'); then echo "64 bit system" else echo "32 bit system" fi
[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"исходя из того, что 64-бит обычно
x86_64и 32-битi686etc.
сначала вы должны загрузить Virtual Box. Затем выберите новый и 32-разрядный Linux. Затем загрузите linux, используя его. Если он загружается, то это 32 бит, если это не так, то это 64 бит.
Comments