Qu'est-ce qu'une commande Linux que je peux exécuter pour renvoyer par programme 32 ou 64 pour indiquer si le processeur est un processeur 32 bits ou 64 bits?
Qu'est-ce qu'une commande Linux que je peux exécuter pour renvoyer par programme 32 ou 64 pour indiquer si le processeur est un processeur 32 bits ou 64 bits?
Réponses:
Vous pouvez voir si le CPU est 64 bits, 32 bits ou capable des deux en vérifiant la flags
faire la queue /proc/cpuinfo
. Vous devez connaître les drapeaux possibles sur votre famille d'architecture. Par exemple, sur les plates-formes i386 / amd64, le lm
flag identifie les processeurs compatibles amd64 (les processeurs qui ne portent pas cet indicateur sont uniquement compatibles avec i386).
grep -q '^flags\s*:.*\blm\b' /proc/cpuinfo # Assuming a PC
Vous pouvez voir si le noyau est 32 bits ou 64 bits en interrogeant l’architecture avec uname -m
. Par exemple, i[3456]86
sont tout en 32 bits x86_64
est 64 bits. Notez que sur plusieurs architectures, un noyau 64 bits peut exécuter des programmes utilisateur 32 bits. Ainsi, même si uname -m
montre un noyau 64 bits, rien ne garantit que les bibliothèques 64 bits seront disponibles.
[ "$(uname -m)" = "x86_64" ] # Assuming a PC
Notez aussi que uname -m
peut renvoyer une valeur «virtualisée». Par exemple, sous Linux, si vous exécutez setarch i386 bash
sur un système amd64, et vous exécutez uname -m
de cette bash, vous verrez uname -m
rapport i386
. Cela vous permet effectivement de prétendre que vous êtes sur un «système 32 bits» même si le noyau est un 64 bits, par exemple pour compiler des programmes 32 bits sans configurer de compilation croisée.
Vous pouvez voir ce qui est disponible dans le pays d’utilisateur en interrogeant le LSB soutien avec le lsb_release
commander. Plus précisément, lsb_release -s
imprime un :
liste séparée des fonctionnalités LSB prises en charge. Chaque caractéristique a la forme module - version - architecture
. Par exemple, la disponibilité d’une bibliothèque ix86 C est indiquée par core-2.0-ia32
, tandis que core-2.0-amd64
est l'analogue pour amd64. Cependant, toutes les distributions ne déclarent pas tous les modules LSB disponibles. Il est donc possible que vous disposiez de davantage de ressources que celles détectables de cette manière.
Vous pouvez connaître la taille de mot préférée pour le développement (en supposant qu'un compilateur C soit disponible) en compilant un programme C de 5 lignes sizeof(void*)
ou sizeof(size_t)
.
getconf WORD_BIT
ou getconf LONG_BIT
au lieu d’avoir à compiler votre propre programme C (trivial et portable, même s’il est).
getconf
ici. Cela semble bien en principe, mais il est difficile de s’assurer que les résultats s’appliquent au compilateur C que vous utiliserez, s’il en existe plusieurs (typiquement gcc / icc ou similaire sous Linux, gcc / native cc ailleurs). Sur un système standard getconf
devrait s'appliquer à c89
ou c99
dans $(getconf PATH)
, mais dans la pratique, je craindrais que quelqu'un installe un autre cc
qui est géré par le vendeur c89
emballage.
.
manquant dans la regex: grep '^flags.*:.*\blm\b' /proc/cpuinfo
. En outre, cela ne fonctionne que pour moi sans le -q
drapeau
.
: J'avais "zéro ou plus d'espaces", mais en réalité il y a un onglet. J'ai changé l'expression régulière pour autoriser également les onglets. Avec le -q
flag, il n'y a pas de sortie, mais le statut de sortie de la commande vous indique si le drapeau est présent. Si vous voulez une sortie, supprimez le -q
drapeau.
-q
drapeau. Ty, travaille maintenant :)
Vous pouvez utiliser uname -a
et chercher x86_64
pour voir si vous utilisez 64 bits. Quelque chose d'autre (autant que je sache) et que vous utilisez 32 bits ou que vous utilisez du matériel non-PC tel que alpha
, sparc
, ou ppc64
.
alpha
, sparc64
, ppc64
, ...
Type:
uname -a
Si vous obtenez x86_64 GNU/Linux
vous utilisez un noyau 64 bits. Si vous obtenez quelque chose de similaire à i386/i486/i586/i686
vous utilisez probablement un noyau 32 bits
getconf utilise le moins d'appels système:
$ strace getconf LONG_BIT | wc -l
253
$ strace arch | wc -l
280
$ strace uname -m | wc -l
281
$ strace grep -q lm /proc/cpuinfo | wc -l
301