Коли я роблю кішку в / proc / cpuinfo, вона показує рядок з clflushsize: 64
Чи означає це, що моє ядро працює в 64 бітах?
Коли я роблю кішку в / proc / cpuinfo, вона показує рядок з clflushsize: 64
Чи означає це, що моє ядро працює в 64 бітах?
Відповіді:
uname -a
підкаже вам ядро - кінцевий біт розповість вам про архітектуру.
Два приклади:
Мій комп'ютер:
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
Мій хостинг 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 біт
x86_64 = 64 біт
uname -m
дасть вам архітектуру, для якої складено ядро. Якщо він друкує, i686
то ваше ядро 32-бітне, якщо x86_64
тоді 64-бітове, якщо у вас є чіп Intel / AMD.
i386
на старих 32-розрядних платформах (і я навіть бачив деякі пакунки, складені для i586
- не впевнений, що це коли-небудь буде виведено uname
, але)
uname -m
дає вам архітектуру, яку ядро обирає піддавати цьому конкретному процесу, а не рідну архітектуру ядра. Дивіться це посилання .
uname -m
справді відображається справжня архітектура. Якщо це не так, то, швидше за все, адміністратор дуже хоче, щоб ви повірили, що ви перебуваєте в тій іншій архітектурі, і найкраще погодитись з тим, щоб визнати, що він знає, що робить. Якщо ви адміністратор і з вами возиться, setarch
то все одно краще знаєте.
setarch
і ви можете використовувати такий сценарій, навіть не маючи уявлення, що це призводить uname -m
до повернення чогось іншого. Можливо, можливо, навіть ймовірно, що подібні питання є питаннями, чому ОР задається.
init
її, вважає її 32-розрядною: ситуація для цього - 64-бітове ядро з 32-бітним простором користувача. Багато систем компіляції залежать від того, uname -m
щоб визначити прапорці компілятора, наприклад, GDB, вони повинні забезпечуватися фальшивою особистістю. Але деякі інші програми користувальницького простору все ще можуть знати, який тип ядра у нього є (наприклад, для деяких потреб низького рівня), незалежно від особистості.
Я думаю, що найбільш точний спосіб
getconf LONG_BIT
ось це точно показує 64
знайдений на цій підказці
getconf
від пакета libc-bin (на ubuntu)
Якщо ви хочете отримати легкий, але детальний звіт про вашу систему (процесор, ядро та програмне забезпечення Core OS), а не лише ядро, то ось невеликий скрипт bash, який швидко дасть вам відповіді.
Якщо ви досить добре знаєте про особливості 32-бітових / 64-бітних процесорів та S / W, це просто зручно. Якщо ви мало знаєте і думаєте, що ваша "система" або 32 біт, або 64 біт, це допоможе вам виявити, що правда може бути більш складною (частини вашої системи можуть бути 64 бітними, а інші 32 бітними), не плутаючи вас.
Знову ж таки цей скрипт (і відповідь) не стосується прямого питання "Як я можу знати, чи моє Linux ядро працює в 32-бітовому або 64-бітовому режимі?" але для тих, хто також хоче знати арку свого процесора та основної ОС SW.
Ось приклади досить незвичного випадку:
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)
Ці 4 рядки дають всю істотну інформацію.
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"
Цей сценарій друкує багато пояснень і є корисним, якщо ви не маєте досвіду роботи з цією темою і стикаєтеся з особливим випадком.
#!/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
Якщо ви хочете дізнатися більше, прочитайте ці дві сторінки, звідки я отримав більшу частину інформації a) /programming/246007/how-to-determine-whether-a-given-linux-is-32- біт або 64-бітний b) https://unix.stackexchange.com/a/134394/73271
Якщо ви хочете бачити лише платформу, на якій ви працюєте, можете скористатися
uname -i
Повний список підтримуваних варіантів uname
є
$ 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
відбитки GenuineIntel
, які насправді не те, що він шукає.
Unknown
на Mac.
i386
на моїй машині!
CLFLUSHSIZE
нічого не розповідає про режим роботи процесора. Відповідно до цієї відповіді , вона відноситься до найменшої флешуальної одиниці кешу. У вашому випадку рядки кеша читаються / записуються в одиницях об'ємом 64 байти.
uname
Результат занадто сильно змінюється, щоб бути корисним, як показує погляд на таблицю прикладів Вікіпедії . Найбільш надійний метод - getconf LONG_BIT
це показано у відповіді Водолія Сила . Це працює незалежно від архітектури процесора, тому просто вдома на ARM, Power або MIPS, як на x86.