- Как определить разрядность Linux-системы
- Как узнать, является ли мой Linux 32-битным или 64-битным?
- Linux знает информацию об архитектуре процессора
- Узнайте,процессор работает d 32-битный или 64-битный в системе Linux
- Как я узнаю, является ли мой Linux 32-битным или 64-битным?
- Другая команда Linux, чтобы проверить, есть ли у меня 32-битная или 64-битная ОС
- Примечание о методе GUI
- Используйте команду lshw
- Заключение
- Просмотр информации о библиотеке Linux / исполняемой версии
- [C/C++][x32, x64] Как узнать разрядность платформы на этапе препроцессинга?
Как определить разрядность Linux-системы
Всегда полезно знать хотя бы основные характеристики операционной системы, под которой приходится работать на компьютере. Например, может понадобиться знать разрядность операционной системы — 32-битная или 64-битная? Это для случая, когда при установке дополнительной программы необходимо выбрать, программу какой разрядности нужно скачать, чтобы установить ее в системе.
Конечно, в Ubuntu Software Center имеется большое количество самых разнообразных программ под операционную систему Ubuntu Linux. Однако, иногда может возникнуть потребность установить программу из стороннего источника, который предлагает на выбор как 32-битная, так и 64-битную версию одной и той же программы. И какую версию программы выбрать в этом случае?
В этой статье будут описаны несколько способов определения, какая разрядность у операционной системы Linux — 32-битная или 64-битная. Некоторые из этих способов предоставляют даже больше информации, нежели только разрядность системы.
Первые два способа используют консольную команду uname , которая выводит требуемую информацию в окне терминала. Если требуется получить больше информации о системе, то необходимо запустить команду uname с флагом -a :
В результате в окне терминала отобразится информация в следующем порядке:
- имя ядра операционной системы
- сетевое имя машины (hostname)
- номер релиза ядра операционной системы
- версия ядра операционной системы
- имя машины
- тип центрального процессора
- платформа
- операционная система
В отображаемом командой списке разрядность системы — это первые цифры после локального времени машины (изображения в статье кликабельны):
К примеру, если система 64-битная, то в консоли это будет обозначено как x86_64 ; если система 32-битная, то в консоли это будет обозначено как i686 или i386 . Обратите внимание, что в выводе программы uname тип центрального процессора и платформа обозначаются точно также, как и разрядность операционной системы.
Если с помощью команды uname необходимо получить только разрядность операционной системы, то достаточно запустить ее в окне терминале с флагом -m :
Эта команда отобразит имя машины и, помимо этого, покажет разрядность операционной системы — 32-битная ( i686 или i386 ) или же 64-битная ( x86_64 ):
Консольная команда arch аналогична команде uname с флагом -m . В окне терминала также отобразится разрядность операционной системы — 32-битная ( i686 или i386 ) или же 64-битная ( x86_64 ). Для этого нужно в консоли ввести имя команды arch и запустить ее, нажав клавишу Enter :
Еще одной консольной командой для вывода информации о разрядности операционной системы является команда file с указанием специального аргумента /sbin/init . В окне терминала нужно ввести команду вида:
В консоли будет выведено много информации, из которой в данном случае необходима только первая строка (точнее — начало этой строки) — . ELF 64-bit LSB . :
Если по каким-то причинам использование консольных команд неприемлемо, то можно воспользоваться графическими утилитами, имеющимися в составе любой операционной системы Linux.
Примечание переводчика: в этом случае будьте готовы к тому, что в разных Desktop Environments (GNOME Shell, Cinnamon, Xfce, KDE, Unity) и Window Managers (Enlightenment, Fluxbox, Xfce и так далее) местонахождение нужной информации может быть каждый раз разным. Консольные утилиты в этом плане более универсальные.
Рассмотрим получение информации о разрядности операционной системы на примере Linux Mint 17.1 Cinnamon. В главном меню системы выбираем пункт «System Settings». В открывшемся окне «System Settings» находим в разделе «Hardware» иконку «System Info». Откроется одноименное окно с информацией об операционной системе Linux:
В первой строке «Operating System» видим тип операционной системы и ее разрядность.
Источник
Как узнать, является ли мой Linux 32-битным или 64-битным?
Мне нужно выяснить, работает ли мой сервер Linux в 32-битной или 64-битной системе.
Как я узнаю, является ли мой Linux 32-битным или 64-битным?
Чтобы проверить, работает ли на вашем сервере Linux 32-битная или 64-битная система, попробуйте следующую команду
- Получить ВСЕ данные о ЦП в Linux, Выполнить: lscpu или cat /proc/cpuinfo
- У меня работает ядро Linux 32-битное или 64-битное? Выполнить: getconf LONG_BIT
- Мой процессор в 32-битном или 64-битном режиме? Запустите: grep -o -w ‘lm’ /proc/cpuinfo | grep -у
Linux знает информацию об архитектуре процессора
Введите следующую команду lscpu:
Из приведенного выше вывода ясно, что у меня есть:
- Процессор: AMD A10-6800K APU with Radeon(tm) HD Graphics
- Архитектура: x86_64
- Процессор может работать: 32-битная или 64-битная операционная система
Узнайте,процессор работает d 32-битный или 64-битный в системе Linux
Просто запустите следующую команду grep
Флаг lm означает процессор в длинном режиме, то есть 64-битный процессор.
Для получения дополнительной информации введите следующую команду cat, чтобы получить полную информацию о вашем процессоре:
Как я узнаю, является ли мой Linux 32-битным или 64-битным?
Теперь вы знаете, что у вас есть процессор AMD, который может работать как в 32-битной, так и в 64-битной операционных системах.
Но как узнать, является ли мое текущее ядро и дистрибутив Linux 64-битным или 32-битным?
Не бойтесь, выполните следующую команду:
Команда getconf проверяет, является ли ядро Linux 32-битным или 64-битным.
64 означает, что у меня 64-битное ядро Linux и дистрибутив Linux.
Другая команда Linux, чтобы проверить, есть ли у меня 32-битная или 64-битная ОС
Для 64-битных вы получите x86_64 и i386 для 32-битных процессоров Intel.
Примечание о методе GUI
Откройте дистрибутив Linux, окно «Настройки» и выберите «Сведения о системе»:
Используйте команду lshw
Выполните следующую команду lshw, чтобы вывести всю информацию о процессоре:
Заключение
Вы узнали, что большинство серверов на базе Intel и компьютер могут работать как с 32-битной, так и с 64-битной операционной системой.
Далее вы узнали различные параметры командной строки, чтобы определить, используете ли вы 32-разрядную или 64-разрядную версию ядра Linux и операционных систем.
Источник
Просмотр информации о библиотеке Linux / исполняемой версии
В Windows EXE и DLL имеют информацию о версии, включая, по крайней мере, следующие поля:
- версия файла
- версия продукта
- внутреннее имя
- наименование товара
- авторское право
В Linux Library / Исполняемый файл:
- Какие поля присутствуют?
- Как просмотреть такую информацию?
- Какие инструменты / библиотеки читать?
Информация о версии явно не сохраняется в файле ELF . У вас есть название библиотеки, в soname которую входит основная версия. Полная версия обычно хранится как часть имени файла библиотеки.
Если у вас есть, скажем libtest.so , библиотека , то у вас обычно есть:
- libtest.so.1.0.1 — сам файл библиотеки, содержащий полную версию
- libtest.so.1 — Ссылка на libtest.so.1.0.1 , имеющая то же имя, что и soname
- libtest.so — Симлинк, libtest.so.1 используемый для ссылки.
В файле библиотеки libtest.so.1.0.1 будет SONAME динамическая секция, которая будет называть эту библиотеку вызываемой libtest.so.1 . Когда вы связываете программу с этой библиотекой, связанная программа будет хранить входящую soname библиотеку NEEDED в динамическом разделе.
Если вы хотите проверить, что именно находится в ELF-файле, вы можете попробовать запустить:
где elffile может быть библиотека исполняемого файла.
Если вы просто хотите получить версию библиотеки, вы можете поиграть с:
AFAIK, такой информации нет (по крайней мере, по умолчанию) в исполняемых файлах.
Или вы можете положиться на саму программу или свою систему упаковки, как писал Рахул Патил.
Источник
[C/C++][x32, x64] Как узнать разрядность платформы на этапе препроцессинга?
Вопрос в следующем. Существует ли какой-нибудь кроссплатформенный метод определения разрядности платформы на этапе препроцессинга?
Гоголь показывает только:
и какое-то дикое обсуждение:
Но нам нужно другое — способ, работающий и в GCC Linux, и в винде, и с разными компиляторами.
У кого-нибудь готовое условие не завалялось?
#if defined(__LP64__) || defined(_M_IA64)
где-то так наверное
Вот потому что ищещь по виндовым терминам, потому и находишь только win64. Эти архитектуры называются x86, amd64/x86-64.
> #if defined(__LP64__) || defined(_M_IA64)
Так наверно или точно?
> Так наверно или точно?
первое для gcc, второе для msvc, надо что-то еще — ищи сам
неужели так сложно (U)LONG_MIN/MAX проверить?
а где вы псдений раз видели 32-хбитную платформу?
толсто, у меня все домашние системы 32-битные.
Просто в другом месте нахожу:
#if defined(LP64) || defined(_LP64)
#if defined(__LP64__) || defined(_M_IA64)
верить не надо, есть документация, для gcc:
«Starting with GCC 3.4, all LP64 platforms will define the macros __LP64__»
ftp://gcc.gnu.org/pub/gcc/summit/2003/Porting%20to%2064%20bit.pdf
там множество решений
Спасибо, на этом и остановлюсь.
я имею в виду 32-хбитный процессор. Все процессоры, выпущенные за последние года 3 имеют 64-битную архитектуру. Давайте все таки не считать пользователей за дуарков, которые будут ставить 32-хбитную ОС на 64-хбитный процессор.
А корректно ли определять через размер size_t?
> А корректно ли определять через размер size_t?
технически — да, но в стандарте, насколько я знаю, размер size_t не указан, т.е. может зависеть от реализации
> Давайте все таки не считать пользователей за дуарков, которые будут ставить 32-хбитную ОС на 64-хбитный процессор.
Но такие есть, и им пофигу на разрядность.
да? Жаль. Я всех своих знакомых на работе пересадил на x86_64 OS (Ubuntu в данном случае)
Пересади меня! А то мне с моим старым ноутом у которого всего 1гб памяти и процом core duo который не держит 64бита как-то ссыкотно переходить.
Вот лол так лол.
> Я всех своих знакомых на работе пересадил на x86_64 OS (Ubuntu в данном случае)
мой п4, которому лет 6 — написано, что умеет amd64 — на деле — нет(
>верить не надо, есть документация
Everybody lies. Это только на IA-64 определено (Itanium).
ясно, да — по названию можно было догадаться, поверил описанию
Но зачем? Если памяти меньше 4G, Вы ничего не выиграете, а наоборот, т.к. 64х-битные приложения требуют больше памяти.
Это действительно нужно? Обычно лучше использовать типы известного размера, например int64_t, u_int32_t и т.п. (см. /usr/include/sys/types.h).
ISO/IEC 9899:1999 → 7.18.1.1 → 3) These types are optional.
Хуже того: их нет даже в MSVC, поэтому там придётся использовать __int64. Он был приведён для примера.
> Хуже того: их нет даже в MSVC
> их нет даже в MSVC
> даже в MSVC
/me подавился пивом…
где написано? на intel.com ? и да, поздние p4 держали x86-64
на винде оно sizeof(long) не зависит от архитектуры x86/x86-64
Я бы распарсил в cmake uname. Или из /proc можно попытаться информацию извлечь. А вот как это сделать в мастдае — понятия не имею.
Где? В своей коробочной русской MS Visual Studio 2008 Professional не нашёл.
Осторожнее надо. IMO сей компилятор — второй по распространённости, если не первый.
Про кроccкомпиляцию мусье не слышал?
Зато для линукса это самое простое решение. А как там в мастдае — понятия не имею. Но для cmake можно сделать проверку на ОС и, в зависимости от нее, вызывать тот или иной велосипед.
кроccкомпиляция подразумевает сборку и под линукс, но другой архитектуры, как самый простой вариант — 32 бита из под 64-битной системы
У ТСа такой задачи не было. Так что не запутывайте.
И, кстати, ЕМНИП, без ВМ не получится (я уже как-то пытался себе дженту 64-битную закомпилять, не пользуясь ВМ — ничего не вышло).
> И, кстати, ЕМНИП, без ВМ не получится
В мане написано, что это для сборки вроде 32бита из-под 64-х. Но что-то у меня, несмотря на всякие ключики в make, 64-битное ядро компилироваться 32-битным gcc не стало.
> Но что-то у меня, несмотря на всякие ключики в make, 64-битное ядро компилироваться 32-битным gcc не стало.
КО говорит, что ты просто не умеешь
Зато для линукса это самое простое решение.
Заканчивай уже пить пиво, оно у вас там с веществами, однозначно.
Молодцы, оперативно работают. Но закладываться на последнюю версию компилятора неправильно IMO.
Сделать проверку компилятора проще на порядки. И безо всяких cmake, а прямо в коде. Для Windows есть набор define’ов, которые устанавливают все компиляторы, а в Linux с вероятностью 99% используется GCC. Способа, который работал бы везде и всегда, AFAIK нет. Даже если бы он был в стандартах, всегда найдётся кто-нибудь, кто им соответствует не полностью.
> Молодцы, оперативно работают.
ну им еще http://gcc.gnu.org/projects/cxx0x.html догонять и догонять, и, как я понял, для Visual Studio vNext более-менее полная поддержка C++0x не ставится как задача
>Существует ли какой-нибудь кроссплатформенный метод определения разрядности платформы на этапе препроцессинга?
Для начала надо определить понятие разрядности платформы. И преследуемые цели. Правильная постановка вопроса — это половина ответа. Иначе будет «что 100? а что приборы?». Реализация С на 64-битовой платформе теоретически может быть полностью 32-битовой (без 64-битовых целых типов и указателей). Как и наоборот.
Источник