Commande Linux pour retourner le nombre de bits (32 ou 64)?
13
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?
@Sathya: Ce n'est pas exactement un doublon, car le processeur peut être en 64 bits, même si Linux ne l'est pas.
Gilles
Réponses:
13
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).
Sur les systèmes GNU (et d’autres s’ils en disposent), vous devriez pouvoir faire getconf WORD_BIT ou getconf LONG_BIT au lieu d’avoir à compiler votre propre programme C (trivial et portable, même s’il est).
Dennis Williamson
@ Dennis: Merci pour la correction. Je n'avais pas pensé à utiliser 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.
Gilles
Il y a un . manquant dans la regex: grep '^flags.*:.*\blm\b' /proc/cpuinfo. En outre, cela ne fonctionne que pour moi sans le -q drapeau
byf-ferdy
@ byf-ferdy Ce n'était pas un manquant .: 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.
Gilles
@ Gilles Ah je ne connaissais pas le -q drapeau. Ty, travaille maintenant :)
byf-ferdy
3
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.
Tout le reste et vous utilisez du matériel 32 bits ou non-PC (tel que alpha, sparc64, ppc64, ...
Gilles
@ Gilles: Merci, j'ai modifié ma réponse en conséquence.
Wuffers
1
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
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, lelm
flag identifie les processeurs compatibles amd64 (les processeurs qui ne portent pas cet indicateur sont uniquement compatibles avec i386).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 bitsx86_64
est 64 bits. Notez que sur plusieurs architectures, un noyau 64 bits peut exécuter des programmes utilisateur 32 bits. Ainsi, même siuname -m
montre un noyau 64 bits, rien ne garantit que les bibliothèques 64 bits seront disponibles.Notez aussi que
uname -m
peut renvoyer une valeur «virtualisée». Par exemple, sous Linux, si vous exécutezsetarch i386 bash
sur un système amd64, et vous exécutezuname -m
de cette bash, vous verrezuname -m
rapporti386
. 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 formemodule - version - architecture
. Par exemple, la disponibilité d’une bibliothèque ix86 C est indiquée parcore-2.0-ia32
, tandis quecore-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*)
ousizeof(size_t)
.la source
getconf WORD_BIT
ougetconf 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 standardgetconf
devrait s'appliquer àc89
ouc99
dans$(getconf PATH)
, mais dans la pratique, je craindrais que quelqu'un installe un autrecc
qui est géré par le vendeurc89
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 chercherx86_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 quealpha
,sparc
, ouppc64
.la source
alpha
,sparc64
,ppc64
, ...Type:
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 bitsla source
la source
getconf utilise le moins d'appels système:
la source