La réponse à la question dans le titre se trouve juste au début de la sortie :
ELF 64 bits Exécutable LSB, x86-64
ELF est le format exécutable et associable, le format de fichier exécutable binaire le plus couramment utilisé par Linux.
x86-64 est l'architecture du binaire, la version 64 bits du jeu d'instructions x86 introduit à l'origine par AMD. Pour des raisons qui me dépassent, Microsoft l'appelle "x64", mais c'est la même chose.
Si vous avez besoin de connaître l'architecture du noyau lui-même, vous pouvez utiliser uname -mpi
. Par exemple, sur mon système, cela affiche :
x86_64 inconnu inconnu
ce qui signifie que j'exécute un noyau x86-64.
Si vous êtes intéressé par le processeur lui-même, regardez /proc/cpuinfo
pour plus de détails sur le ou les processeurs détectés par le noyau Linux.
Un exécutable 32 bits 80x86 est identifié par file
comme par exemple :
ELF 32 bits Exécutable LSB, Intel 80386 , version 1 (SYSV), lié dynamiquement (utilise des bibliothèques partagées), pour GNU/Linux 2.6.8, supprimé
qui nous indique qu'il s'agit d'un exécutable 32 bits utilisant le jeu d'instructions Intel 80386 (éventuellement avec des extensions).
Notez que ce n'est pas aussi simple que les architectures 32 bits par rapport aux architectures 64 bits. Par exemple, le noyau Linux prend en charge les architectures 32 bits comme Intel 80386, AVR32, S/390 et Unicore32. Du côté 64 bits, Linux est utilisable sur PA-RISC, x86-64, Itanium et Alpha, entre autres. Cependant, toutes les distributions ne fournissent pas de binaires pour toutes les architectures (et je doute qu'il existe des distributions qui ciblent toutes architectures CPU prises en charge de la même manière). Donc, si vous voulez savoir si un binaire donné sera exécutable sur un système donné, vous devez considérer l'architecture , plutôt que la taille de mot native du CPU.
Le 5ème octet d'un fichier exécutable binaire Linux (format ELF, voir Wikipedia) est 1 pour un exécutable 32 bits, 2 pour un exécutable 64 bits.
Pour voir cela pour un programme nommé "foo", tapez sur la ligne de commande
od -t x1 -t c foo | head -n 2
Si vous voulez éviter le tuyau 'head', vous pouvez le faire
od -An -t x1 -j 4 -N 1 foo
Cela imprimera 01 si foo est un binaire 32 bits et 02 s'il s'agit de 64. Il peut toujours inclure des espaces en tête - à savoir si vous effectuez des comparaisons automatisées sur les résultats.
Si trouvé cela utile dans un conteneur Ubuntu Docker de base où 'fichier' n'a pas été installé.