Ответ на вопрос в заголовке находится прямо в начале вывода:
ELF 64-битный исполняемый LSB, x86-64
ELF - это исполняемый и линкованный формат , двоичный формат исполняемых файлов, наиболее часто используемый в Linux.
x86-64 - это архитектура двоичного кода, 64-битная версия набора команд x86, первоначально представленная AMD . По причинам, которые мне не известны, Microsoft называет его «x64», но это то же самое.
Если вам нужно знать архитектуру самого ядра, вы можете использовать uname -mpi
. Например, в моей системе это печатает:
x86_64 неизвестно неизвестно
это означает, что я использую ядро x86-64.
Если вас интересует сам процессор, посмотрите /proc/cpuinfo
подробную информацию о процессорах, обнаруженных ядром Linux.
32-битный исполняемый файл 80x86 идентифицируется file
как, например:
ELF 32-битный исполняемый LSB, Intel 80386 , версия 1 (SYSV), динамически связанный (использует общие библиотеки), для GNU / Linux 2.6.8, раздетый
это говорит нам о том, что это 32-битный исполняемый файл, использующий набор инструкций Intel 80386 (возможно, с расширениями).
Обратите внимание, что это не так просто, как 32-битные и 64-битные архитектуры. Например, ядро Linux поддерживает 32-разрядные архитектуры, такие как Intel 80386, AVR32 , S / 390 и Unicore32 . Что касается 64-битной стороны, Linux может использоваться на PA-RISC , x86-64, Itanium и Alpha , среди других. Однако не все дистрибутивы предоставляют двоичные файлы для всех архитектур (и я сомневаюсь, что есть какие-либо дистрибутивы, которые одинаково нацелены на все поддерживаемые архитектуры ЦП). Поэтому, если вы хотите знать, будет ли данный двоичный файл выполняться в данной системе, вам нужно рассмотреть архитектуру , а не собственный размер слова ЦП.
5-й байт двоичного исполняемого файла Linux ( формат ELF, см. Википедия ) равен 1 для 32-разрядного исполняемого файла, 2 для 64-разрядного исполняемого файла.
Чтобы увидеть это для программы с именем "foo", введите в командной строке
источник
Если вы хотите избежать "головы" трубы, вы можете сделать
Он выведет 01, если foo является 32-битным двоичным файлом, и 02, если он 64. Он может по-прежнему включать в себя несколько пробелов - стоит знать, проводите ли вы автоматические сравнения результатов.
Если это оказалось полезным в базовом контейнере Ubuntu Docker, где «файл» не был установлен.
источник