Як дізнатись, чи працює моє Linux ядро ​​в 32-бітовому або 64-бітовому режимі?


Відповіді:


15
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 біт


3
Ця відповідь неправильна. Кінцевий біт повідомляє вам про архітектуру, що піддається процесу, а не архітектуру ядра. Дивіться це посилання .
Девід Шварц

12

uname -mдасть вам архітектуру, для якої складено ядро. Якщо він друкує, i686то ваше ядро ​​32-бітне, якщо x86_64тоді 64-бітове, якщо у вас є чіп Intel / AMD.


Може бути і i386на старих 32-розрядних платформах (і я навіть бачив деякі пакунки, складені для i586- не впевнений, що це коли-небудь буде виведено uname, але)
a_m0d,

3
Ця відповідь неправильна. uname -mдає вам архітектуру, яку ядро ​​обирає піддавати цьому конкретному процесу, а не рідну архітектуру ядра. Дивіться це посилання .
Девід Шварц

@David Schwartz: Ваш коментар занадто різкий без жодних вагомих причин, а те, що ви не розмістили жодної альтернативи, робить його ще гіршим. У будь-якому випадку зауважте, що за замовчуванням uname -m справді відображається справжня архітектура. Якщо це не так, то, швидше за все, адміністратор дуже хоче, щоб ви повірили, що ви перебуваєте в тій іншій архітектурі, і найкраще погодитись з тим, щоб визнати, що він знає, що робить. Якщо ви адміністратор і з вами возиться, setarchто все одно краще знаєте.
ndemou

Я не знаю, що суворого щодо справжнього фактичного твердження про те, що відповідь неправильна. Що ви маєте на увазі, "зробивши це ще гіршим". Можливо, немає способу. Можливо, є хороший шлях. Я не знаю, тому не відповів на це запитання. Щодо кінця ваших коментарів, я просто не згоден. Сценарії можуть і використовувати, setarchі ви можете використовувати такий сценарій, навіть не маючи уявлення, що це призводить uname -mдо повернення чогось іншого. Можливо, можливо, навіть ймовірно, що подібні питання є питаннями, чому ОР задається.
Девід Шварц

@ndemou Адміністратор, можливо, налаштував систему таким чином, що будь-яка програма, включаючи initїї, вважає її 32-розрядною: ситуація для цього - 64-бітове ядро ​​з 32-бітним простором користувача. Багато систем компіляції залежать від того, uname -mщоб визначити прапорці компілятора, наприклад, GDB, вони повинні забезпечуватися фальшивою особистістю. Але деякі інші програми користувальницького простору все ще можуть знати, який тип ядра у нього є (наприклад, для деяких потреб низького рівня), незалежно від особистості.
Руслан


2

Якщо ви хочете отримати легкий, але детальний звіт про вашу систему (процесор, ядро ​​та програмне забезпечення 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


0

Якщо ви хочете бачити лише платформу, на якій ви працюєте, можете скористатися

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, які насправді не те, що він шукає.
drrlvn

і Unknownна Mac.
Річ Бредшоу

відбитки i386на моїй машині!
a_m0d

0

CLFLUSHSIZEнічого не розповідає про режим роботи процесора. Відповідно до цієї відповіді , вона відноситься до найменшої флешуальної одиниці кешу. У вашому випадку рядки кеша читаються / записуються в одиницях об'ємом 64 байти.

unameРезультат занадто сильно змінюється, щоб бути корисним, як показує погляд на таблицю прикладів Вікіпедії . Найбільш надійний метод - getconf LONG_BITце показано у відповіді Водолія Сила . Це працює незалежно від архітектури процесора, тому просто вдома на ARM, Power або MIPS, як на x86.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.