Я видел несколько оснований, мой фаворит - то, что это должно праздновать 20 лет Linux. Независимо от этого между версиями нет никакого заметного изменения, сам Linus непреклонен по отношению к этому; это не Gnome 3.0 или KDE 4.
Аппаратные средства, ядро и программы пространства пользователя могут иметь различные размеры слова ¹.
Вы видите, является ли ЦП 64-разрядным, 32-разрядным, или способным к обоим путем проверки flags
строка в /proc/cpuinfo
. Необходимо знать возможные флаги на семействе архитектуры. Например, на i386/amd64 платформах, lm
флаг определяет amd64-способные центральные процессоры (центральные процессоры, которые не имеют того флага, i386-только).
grep -q '^flags *:.*\blm\b' /proc/cpuinfo # Assuming a PC
Вы видите, является ли ядро 32-разрядным или 64-разрядным путем запросов архитектуры с uname -m
. Например, i[3456]86
являются 32-разрядными в то время как x86_64
является 64-разрядным. Обратите внимание, что на нескольких архитектуре, 64-разрядное ядро может запустить 32-разрядные программы пространства пользователя, поэтому даже если uname -m
показывает 64-разрядное ядро, нет никакой гарантии, что 64-разрядные библиотеки будут доступны.
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
Вы видите то, что доступно в пространстве пользователя путем запросов поддержки LSB с lsb_release
команда. Более точно, lsb-release -s
печать a :
- разделенный список поддерживавших функций LSB. Каждая функция имеет форму module-version-architecture
. Например, доступность библиотеки ix86 C обозначается core-2.0-ia32
, в то время как core-2.0-amd64
аналог для amd64. Не каждое распределение объявляет все доступные модули LSB, хотя, таким образом, больше может быть доступным, чем обнаруживаемо таким образом.
Вы видите то, для чего создаются программы архитектуры в системе с командой как file /bin/ls
. Обратите внимание, что возможно иметь смешанную систему; даже если ls
64-разрядная программа, Вашей системе можно было установить библиотеки для запущения 32-разрядных программ, и (реже) наоборот.
Можно узнать предпочтительный размер слова для разработки (предполагающий, что компилятор C доступен) путем компиляции программы C с 5 строками, которая печатает sizeof(void*)
или sizeof(size_t)
. Можно получить ту же информацию немного менее надежным способом ² путем выполнения команды getconf LONG_BIT
.
#include <stdio.h>
int main() {
printf("%d\n", (int)sizeof(void*));
return 0;
}
Что касается виртуальных машин, можете ли Вы выполнить 64-разрядный VM в 32-разрядной системе или наоборот зависите от Вашей технологии виртуальной машины. Посмотрите в особенности, Как я могу установить виртуальную машину Linux на 64 бита на Linux на 32 бита?
¹ “размер Word” обычное название того, что Вы называете разрядностью.
² Это может быть ненадежно, если кто-то установил альтернативный компилятор C с другой целевой архитектурой, но сохранил системное значение по умолчанию getconf
.
Взгляните на man uname
.
Можно скомпилировать и запустить 32-разрядные программы на 64-разрядной машине (хотя это требует специальной установки), но не может выполнить 64-разрядные двоичные файлы в 32-разрядной системе. То же относится ко многим Виртуальным машинам, но не all*. Таким образом, если у Вас есть ядро на 64 бита, нет никакого способа, которым Ваши аппаратные средства составляют 32 бита только.
Если Вы хотите протестировать, для какой разрядности программа в двоичном представлении сделана, выполнение file /path/to/the/program
.
* Это зависит на уровне, на который воздействует данная Виртуальная машина: Те, которые выполняют двоичный код (почти) непосредственно на хосте ЦП, не смогут выполнить 64-битный код на 32-разрядном хосте. Те, которые эмулируют определенный ЦП, могут сделать это, но они менее эффективны из-за уровня эмуляции.
Вы задаваетесь вопросом о uname
Несколько вхождений X86_64:
x86_64 x86_64 x86_64
Это те три значения ( omit -p и -i, если неизвестно » )
-m, --machine
print the machine hardware name
-p, --processor
print the processor type or "unknown"
-i, --hardware-platform
print the hardware platform or "unknown"
Обратите внимание, что -P
и --i
не являются частью стандарта POSIX . Значения Неизвестно
на Debian, поэтому uname будет печатать x86_64 только один раз. Red Hat / Centos определяет значение.
Также прочитал: Как unux unime -m
Получить свою информацию? и Почему uname -p и uname -m и arch вывод разные архитектуры? Отказ
which init
"может быть взлом, который стоит добавить к списку. (Вне темы: Вы когда-либо писали какие-либо книги по Unix? Я купил бы один)) – ジョージ 20.03.2015, 17:47