Хочется такой же универсальный и переносимый способ как uname -m
Нашел что на debian и последователях: dpkg --print-architecture
Есть ли аналог в семестве redhat/centos/fedora и OpenSUSE/SLES, Gentoo, Arch?
Еще есть: getconf LONG_BIT
на маке не пробовал но она там тоже вроде есть?
Интересует так же bsd-системы с linux compatiblity layer, если на них можно конечно ставить 32х битный libc6.so с 64х битным ядром.
Вопрос про sh только. В частности, нужно в shell-скрипте загрузить скомпилированный бинарник под нужную архитектуру и uname -m не подходит.
Майкрософт, к примеру, в своем dotnet core установщике использует только uname -m, и не использует ни dpkg --print-architecture ни getconf LONG_BIT ни что еще
Почему — хз
Здравствуйте, VladCore, Вы писали:
VC>Есть ли аналог в семестве redhat/centos/fedora и OpenSUSE/SLES, Gentoo, Arch?
Я про Gentoo могу немного рассказать. Есть profile, который определяет настройки по-умолчанию. Например, у меня
> eselect profile show
Current /etc/portage/make.profile symlink:
default/linux/amd64/17.1/desktop
Это 64-битный (по умолчанию) мир. Но при этом в Генте штатный multilib:
> locate libc.so
/lib/libc.so.6
/lib64/libc.so.6
/usr/lib/libc.so
/usr/lib64/libc.so
(которые в lib — это 32 бита в моем профиле, еще неделю назад 32 бита лежали в lib32 и lib был ссылкой на lib64).
Но! В Генте много разных ручек. Есть подозрение, что при должной сноровке можно конкретные приложения собрать разной битности. Например, 32-битный ls и 64-битный firefox.
VC>Вопрос про sh только. В частности, нужно в shell-скрипте загрузить скомпилированный бинарник под нужную архитектуру и uname -m не подходит.
А может просто посмотреть на какой-нибудь системный бинарник?
> file (which file)
/usr/bin/file: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, stripped
VC>Майкрософт, к примеру, в своем dotnet core установщике использует только uname -m, и не использует ни dpkg --print-architecture ни getconf LONG_BIT ни что еще
VC>Почему — хз
Я думаю, потому что обычно битность ядра соответствует битности приложения. А если вдруг не соответствует — администраторы системы причины знают и смогут при необходимости ваш sh поправить.
Здравствуйте, VladCore, Вы писали:
VC>Хочется такой же универсальный и переносимый способ как uname -m
Ты почти нашол
sheridan@gate ~ $ uname -m
x86_64
sheridan@gate ~ $ lscpu | grep 'op-mode'
CPU op-mode(s): 32-bit, 64-bit
А потом условие типа "если uname x86 и 64 в оп-моде, то вот оно"
Ты б объяснил чому минус то. Мне ж интересно что я не так написал
Здравствуйте, Sheridan, Вы писали:
S>Ты б объяснил чому минус то. Мне ж интересно что я не так написал
если ты смотрел контекст то речь идет про скрипты. getconf лежит в libc-bin и более распространена в разы. а lscpu почти нигде не предустановлено там где скрипты эти нужны — на серверах.
ну и главное getconf для скриптов и парсинга идеально подходит. т.е. парсить ничего не надо.
и кстати на arm64 никакого op-mode нет хотя там оно было бы актуально. потому как arm64 в отличии от AMD64 не гарантирует поддержку старых armv7 32 битных инструкций и приложений
Здравствуйте, VladCore, Вы писали:
S>>Ты б объяснил чому минус то. Мне ж интересно что я не так написал
VC>getconf
А, ну можно и так.