GNU/Linux >> Znalost Linux >  >> Linux

Jak zjistit, zda je linuxový binární soubor 32bitový nebo 64bitový?

Odpověď na otázku v nadpisu je hned na začátku výstupu:

ELF 64bitový Spustitelný soubor LSB, x86-64

ELF je Executable and Linkable Format, binární formát spustitelných souborů nejběžněji používaný Linuxem.

x86-64 je architektura binárního systému, 64bitové verze instrukční sady x86 původně představené AMD. Z důvodů, které jsou mimo mě, to Microsoft označuje jako „x64“, ale to je totéž.

Pokud potřebujete znát architekturu samotného jádra, můžete použít uname -mpi . Například v mém systému se vypíše:

x86_64 neznámý neznámý

což znamená, že používám jádro x86-64.

Pokud vás zajímá samotný CPU, podívejte se na /proc/cpuinfo podrobnosti o CPU detekovaných linuxovým jádrem.

32bitový spustitelný soubor 80x86 je označen file jako například:

ELF 32bitový Spustitelný soubor LSB, Intel 80386 , verze 1 (SYSV), dynamicky propojená (používá sdílené knihovny), pro GNU/Linux 2.6.8, zbavena

což nám říká, že se jedná o 32bitový spustitelný soubor využívající instrukční sadu Intel 80386 (možná s rozšířeními).

Všimněte si, že to není tak jednoduché jako 32bitové versus 64bitové architektury. Například linuxové jádro podporuje 32bitové architektury jako Intel 80386, AVR32, S/390 a Unicore32. Na 64bitové stránce je Linux použitelný mimo jiné na PA-RISC, x86-64, Itanium a Alpha. Ne všechny distribuce však poskytují binární soubory pro všechny architektury (a pochybuji, že existují distribuce, které cílí na všechny stejně podporované architektury CPU). Pokud tedy chcete vědět, zda bude daný binární soubor na daném systému spustitelný, musíte zvážit architekturu , spíše než nativní velikost slova CPU.


5. bajt linuxového binárního spustitelného souboru (formát ELF, viz Wikipedia) je 1 pro 32bitový spustitelný soubor, 2 pro 64bitový spustitelný soubor.

Chcete-li to zobrazit pro program s názvem "foo", zadejte na příkazovém řádku

od -t x1 -t c foo | head -n 2

Pokud se chcete vyhnout 'hlavové' trubce, můžete

od -An -t x1 -j 4 -N 1 foo

Tím se vytiskne 01, pokud je foo 32bitový binární soubor, a 02, pokud je 64. Stále může obsahovat nějaké úvodní mezery – stojí za to vědět, zda provádíte nějaké automatické porovnávání výsledků.

Pokud to bylo užitečné v základním kontejneru Ubuntu Docker, kde nebyl nainstalován „soubor“.


Linux
  1. Jak zjistit, zda je daný Linux 32bitový nebo 64bitový?

  2. Jak zkompilovat 32bitový binární soubor na 64bitovém linuxovém stroji s gcc/cmake

  3. Jak převést linuxový spustitelný soubor (binární) na soubor Windows exe?

  1. Jak spravovat možnosti souborů Linux

  2. Jak přejmenovat soubor v Linuxu?

  3. Jak určit bitbit hardwaru a OS?

  1. Jak rozeznat binární soubory od textových souborů v linuxu

  2. Jak mohu bezpečně spustit nedůvěryhodný spustitelný soubor na linuxu?

  3. Jak spolehlivě určit typ souborového systému pod Linuxem?