Odpowiedź na pytanie w tytule znajduje się na początku danych wyjściowych:
ELF 64-bitowy plik wykonywalny LSB, x86-64
ELF jest formatem wykonywalnym i linkowalnym , binarnym formatem plików wykonywalnych najczęściej używanym przez Linuksa.
x86-64 to architektura binarnej, 64-bitowej wersji zestawu instrukcji x86, pierwotnie wprowadzonego przez AMD . Z powodów, które są poza mną, Microsoft nazywa to „x64”, ale to samo.
Jeśli chcesz poznać architekturę samego jądra, możesz użyć uname -mpi
. Na przykład w moim systemie, który drukuje:
x86_64 nieznany nieznany
co oznacza, że korzystam z jądra x86-64.
Jeśli interesuje Cię sam procesor, sprawdź /proc/cpuinfo
szczegóły na temat procesorów wykrytych przez jądro Linuksa.
32-bitowy plik wykonywalny 80x86 jest identyfikowany przez file
, na przykład:
ELF 32-bitowy plik wykonywalny LSB, Intel 80386 , wersja 1 (SYSV), dynamicznie połączony (korzysta ze współdzielonych bibliotek), dla GNU / Linux 2.6.8, pozbawiony
co mówi nam, że jest to 32-bitowy plik wykonywalny przy użyciu zestawu instrukcji Intel 80386 (prawdopodobnie z rozszerzeniami).
Zauważ, że nie jest to tak proste jak architektura 32-bitowa w porównaniu z architekturą 64-bitową. Na przykład jądro Linux obsługuje architektury 32-bitowe, takie jak Intel 80386, AVR32 , S / 390 i Unicore32 . Po 64-bitowej stronie Linux można stosować między innymi w PA-RISC , x86-64, Itanium i Alpha . Jednak nie wszystkie dystrybucje zapewniają pliki binarne dla wszystkich architektur (i wątpię, aby istniały jakiekolwiek dystrybucje skierowane w równym stopniu na wszystkie obsługiwane architektury procesorów). Więc jeśli chcesz wiedzieć, czy dany plik binarny będzie wykonywalny w danym systemie, musisz wziąć pod uwagę architekturę , a nie rozmiar natywnego słowa procesora.
Piąty bajt binarnego pliku wykonywalnego systemu Linux ( format ELF, patrz Wikipedia ) to 1 dla 32-bitowego pliku wykonywalnego, 2 dla 64-bitowego pliku wykonywalnego.
Aby zobaczyć to dla programu o nazwie „foo”, wpisz w wierszu polecenia
źródło
Jeśli chcesz uniknąć „głowicy”, możesz to zrobić
Spowoduje to wydrukowanie 01, jeśli foo jest 32-bitowym plikiem binarnym, a 02, jeśli jest to 64. Może nadal zawierać kilka wiodących spacji - warto wiedzieć, czy przeprowadzasz automatyczne porównania wyników.
Jeśli okaże się to przydatne w podstawowym kontenerze Ubuntu Docker, w którym „plik” nie został zainstalowany.
źródło