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?
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?
Réponses:
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
uname -m
vous donnera l'architecture pour laquelle votre noyau est compilé. S'il s'imprime, i686
votre noyau est de 32 bits, s'il x86_64
est de 64 bits, en supposant que vous avez une puce Intel / AMD.
i386
sur 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
uname -m
vous donne l'architecture que le noyau choisit d'exposer à ce processus particulier, pas l'architecture native du noyau. Voir ce lien .
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, setarch
vous savez déjà mieux de toute façon.
setarch
et utilisent et vous pouvez invoquer un tel script sans avoir la moindre idée qu'il provoque uname -m
le 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.
init
pense 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 -m
pour 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é.
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)
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.
Voici des exemples d'un cas assez inhabituel:
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
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)
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"
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
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 uname
est -
$ 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
uname -i
impressions GenuineIntel
, ce qui n'est pas vraiment ce qu'il cherche.
Unknown
sur un Mac.
i386
sur ma machine!
CLFLUSHSIZE
ne 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.
uname
la sortie varie trop pour être utile, comme le montre le tableau d'exemples de Wikipedia . La méthode la plus fiable est getconf LONG_BIT
celle 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.