Comment savoir si mon noyau Linux fonctionne en 32 bits ou 64 bits?

10

Quand je fais un chat dans / proc / cpuinfo, il montre une ligne avec clflushsize: 64

Est-ce à dire que mon noyau fonctionne en 64 bits?

Daniel Cukier
la source

Réponses:

15
uname -a

vous dira le noyau - le bit de fin vous indique l'architecture.

Deux exemples:

Mon mac:

Darwin Mac.local 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386

Mon hébergement Dreamhost:

Linux ecco 2.6.24.5-serf-xeon-c6.1-grsec #1 SMP Tue Oct 7 06:18:04 PDT 2008 x86_64 GNU/Linux

i386 = 32 bits

x86_64 = 64 bits

Rich Bradshaw
la source
3
Cette réponse est fausse. Le bit de fin vous indique l'architecture exposée au processus, pas l'architecture du noyau. Voir ce lien .
David Schwartz
12

uname -mvous donnera l'architecture pour laquelle votre noyau est compilé. S'il s'imprime, i686votre noyau est de 32 bits, s'il x86_64est de 64 bits, en supposant que vous avez une puce Intel / AMD.

drrlvn
la source
Pourrait également être i386sur des plates-formes 32 bits plus anciennes (et j'ai même vu certains packages compilés pour i586- je ne sais pas si cela serait jamais uname
sorti
3
Cette réponse est fausse. uname -mvous donne l'architecture que le noyau choisit d'exposer à ce processus particulier, pas l'architecture native du noyau. Voir ce lien .
David Schwartz
@David Schwartz: Votre commentaire est trop dur sans raison valable et le fait que vous n'ayez publié aucune alternative ne fait qu'empirer les choses. En tout cas noter que par défaut uname -m ne rapport l'architecture réelle. Si ce n'est pas le cas, alors très probablement, l'administrateur veut vraiment que vous croyiez que vous êtes sur cette autre architecture et votre meilleur pari est d'accepter qu'il sait ce qu'il fait. Si vous êtes l'administrateur et que vous jouez, setarchvous savez déjà mieux de toute façon.
ndemou
Je ne sais pas ce qui est dur à propos de la véritable déclaration factuelle selon laquelle la réponse est fausse. Que voulez-vous dire par "rendre la situation encore pire"? Peut-être qu'il n'y a aucun moyen. Il y a peut-être un bon moyen. Je ne sais pas, donc je n'ai pas répondu à cette question. Quant à la fin de vos commentaires, je ne suis tout simplement pas d'accord. Les scripts peuvent utiliser setarchet utilisent et vous pouvez invoquer un tel script sans avoir la moindre idée qu'il provoque uname -mle retour de quelque chose de différent. Il est possible, voire même probable, que ce genre de problèmes explique pourquoi le PO le demande.
David Schwartz
@ndemou, l'administrateur a peut-être configuré le système de telle manière que toute application, y compris, initpense qu'il est 32 bits: la situation est un noyau 64 bits avec un espace utilisateur 32 bits. De nombreux systèmes de compilation dépendent uname -mpour déterminer les drapeaux du compilateur, par exemple celui de GDB, ils doivent être fournis avec une fausse personnalité. Mais une autre application de l'espace utilisateur peut toujours vouloir savoir quel type de noyau elle possède (par exemple pour certains besoins de bas niveau), quelle que soit sa personnalité.
Ruslan
9

Je pense que le moyen le plus précis est

getconf LONG_BIT

ici ça montre exactement 64

trouvé sur cette astuce

getconf provient du paquet libc-bin (sur ubuntu)

Puissance du Verseau
la source
2

Si vous voulez un rapport simple mais détaillé sur votre système (CPU, noyau et logiciel Core OS) et pas seulement sur le noyau, voici un petit script bash qui vous donnera rapidement les réponses.

Si vous en savez assez sur les particularités des processeurs 32 bits / 64 bits et S / W, c'est tout simplement pratique. Si vous ne savez pas grand-chose et pensez que votre "système" est soit 32 bits soit 64 bits, cela vous aidera à découvrir que la vérité peut être plus complexe (certaines parties de votre système peuvent être 64 bits tandis que d'autres 32 bits) sans vous dérouter.

Encore une fois, ce script (et sa réponse) n'est pas destiné à la question littérale "Comment savoir si mon noyau Linux fonctionne en 32 bits ou 64 bits?" mais pour ceux qui veulent également connaître l'arc de leur CPU, et le noyau OS SW.

Exemples de rapports

Voici des exemples d'un cas assez inhabituel:

Rapport du mini-script (pour les utilisateurs expérimentés)

You have a 64 bit CPU
Your kernel reports that the architecture is 32 bit
Your /sbin/init process is 64 bit
Your C compiler is configured to produce 32 bit executables

Rapport d'un script plus grand (pour les utilisateurs moins expérimentés)

You have a 64 bit CPU
Your kernel reports that the architecture is 32 bit
    If you are not the admin he can make a 64bit kernel report 32bit (see man setarch)
    In this case he has (because we have 64bit programs)
Your /sbin/init process is 64 bit
    Most other core OS programs will probably be 64 bits also.
    You may use the following command to check a specific program.
      file -L /path/to/program
Your C compiler is configured to produce 32 bit executables
    (Note that a 64bit compiler may be setup to produce 32bit code)

Les scripts

Mini-script (pour les administrateurs expérimentés)

Ces 4 lignes donnent toutes les informations essentielles.

grep -w 'lm' /proc/cpuinfo > /dev/null && echo "You have a 64 bit CPU" || echo "You have a 32 bit CPU"
echo "Your kernel reports that the architecture is $(uname -m|sed -e 's/x86_64/64 bit/' -e 's/i.86/32 bit/')"
echo "Your /sbin/init process is $(file /sbin/init|sed -e 's/^.* \(32\|64\) bit.*$/\1bit/')"
echo "Your C compiler is configured to produce $(getconf LONG_BIT) bit executables"

Script plus grand (pour les utilisateurs moins expérimentés)

Ce script imprime beaucoup d'explications et est utile si vous n'avez pas d'expérience sur le sujet et êtes confronté à un cas particulier.

#!/bin/bash

# collect system info
grep -w 'lm' /proc/cpuinfo > /dev/null && CPU=64 || CPU=32
ARCH=$(uname -m|sed -e 's/x86_64/64/' -e 's/i.86/32/')
INIT=$(file -L /sbin/init|sed -e 's/^.* \(32\|64\)-bit.*$/\1/')
COMPILER=$(getconf LONG_BIT)

# if all values are the same we set UNIFORM="YES"
! echo "$CPU $ARCH $INIT $COMPILER" | grep -q "$CPU $CPU $CPU $CPU" && UNIFORM="NO" || UNIFORM="YES"

# report to the user
echo "You have a $CPU bit CPU"
echo "Your kernel reports that the architecture is $ARCH bit"
if [ "$UNIFORM" = "NO" ] && [ "$ARCH" = "32" ] ; then
       echo "    If you are not the admin he can make a 64bit kernel report 32bit (see man setarch)"
       if  [ "$INIT" = "64" ] ||  [ "$COMPILER" = "64" ] ; then
           echo "    In this case he has (because we have 64bit programs)"
       else
           echo "    We don't see such signs so you most likely run a 32bit kernel"
           echo "    (A 64bit CPU can run 32bit kernels)"
       fi
fi
echo "Your /sbin/init process is $INIT bit"
if [ "$CPU" = "64" ] ; then
     echo "    Most other core OS programs will probably be $INIT bits also."
     echo "    You may use the following command to check a specific program."
     echo "      file -L /path/to/program"
fi
if [ "$UNIFORM" = "NO" ] && [ "$INIT" = "32" ] ; then
     echo "    (Note that a 64bit kernel may start a 32bit init process)"
fi
echo "Your C compiler is configured to produce $COMPILER bit executables"
if [ "$UNIFORM" = "NO" ] && [ "$COMPILER" = "32" ] ; then
        echo "    (Note that a 64bit compiler may be setup to produce 32bit code)"
fi

Si vous voulez en savoir plus, lisez ces deux pages d'où j'ai obtenu la plupart des informations a) /programming/246007/how-to-determine-whether-a-given-linux-is-32- bit ou 64 bits b) /unix//a/134394/73271

ndemou
la source
0

Si vous souhaitez voir uniquement la plate-forme sur laquelle vous exécutez, vous pouvez utiliser

uname -i

La liste complète des options prises en charge pour unameest -

$ uname --help
Usage: uname [OPTION]...
Print certain system information.  With no OPTION, same as -s.

  -a, --all                print all information, in the following order,
                             except omit -p and -i if unknown:
  -s, --kernel-name        print the kernel name
  -n, --nodename           print the network node hostname
  -r, --kernel-release     print the kernel release
  -v, --kernel-version     print the kernel version
  -m, --machine            print the machine hardware name
  -p, --processor          print the processor type or "unknown"
  -i, --hardware-platform  print the hardware platform or "unknown"
  -o, --operating-system   print the operating system
      --help     display this help and exit
      --version  output version information and exit
a_m0d
la source
uname -iimpressions GenuineIntel, ce qui n'est pas vraiment ce qu'il cherche.
drrlvn
et Unknownsur un Mac.
Rich Bradshaw
imprime i386sur ma machine!
a_m0d
0

CLFLUSHSIZEne vous dit rien sur le mode de fonctionnement du processeur. Selon cette réponse , il s'agit de la plus petite unité de cache jetable. Dans votre cas, les lignes de cache sont lues / écrites en unités de 64 octets.

unamela sortie varie trop pour être utile, comme le montre le tableau d'exemples de Wikipedia . La méthode la plus fiable est getconf LONG_BITcelle indiquée dans la réponse d'Aquarius Power . Cela fonctionne quelle que soit l'architecture du processeur, c'est donc tout à fait à la maison sur ARM, Power ou MIPS comme sur x86.

Toby Speight
la source