Как узнать, работает ли мое ядро ​​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

Хостинг My 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дает вам архитектуру, которую ядро ​​выбирает для этого конкретного процесса, а не нативную архитектуру ядра. Смотрите эту ссылку .
Дэвид Шварц

@ Дэвид Шварц: Ваш комментарий слишком резок без веской причины, и тот факт, что вы не разместили никакой альтернативы, делает его еще хуже. Во всяком случае, обратите внимание, что по умолчанию uname -m действительно сообщает реальную архитектуру. Если это не так, то, скорее всего, администратор действительно хочет, чтобы вы поверили, что вы используете другую архитектуру, и вам лучше всего признать, что он знает, что делает. Если вы являетесь администратором, и вы балуетесь, setarchто вы все равно знаете лучше.
ndemou

Я не знаю, что грубо об истинном фактическом утверждении, что ответ неверен. Что вы имеете в виду, «заставляя это выглядеть еще хуже». Может быть, нет никакого способа. Может быть, есть хороший способ. Я не знаю, поэтому я не ответил на этот вопрос. Что касается конца ваших комментариев, я просто не согласен. Скрипты могут использовать, setarchи вы можете их использовать, и вы можете вызывать такой скрипт, даже не подозревая, что он вызывает uname -mчто-то другое. Возможно, возможно даже вероятно, что именно такие вопросы и являются причиной, по которой ОП задает вопрос.
Дэвид Шварц

@ndemou администратор, возможно, настроил систему таким образом, что любое приложение, в том числе initсчитает, что оно 32-разрядное: для этого используется 64-разрядное ядро ​​с 32-разрядным пользовательским пространством. Многие системы компиляции зависят от uname -mопределения флагов компилятора, например, флаг GDB, они должны быть снабжены поддельной личностью. Но какое-то другое пользовательское приложение может по-прежнему хотеть знать, какое у него ядро ​​(например, для некоторых низкоуровневых нужд), независимо от индивидуальности.
Руслан


2

Если вам нужен простой, но подробный отчет о вашей системе (CPU, Kernel и 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-бит б) https://unix.stackexchange.com/a/134394/73271


0

Если вы хотите видеть только ту платформу, на которой вы работаете, вы можете использовать

uname -i

Полный список поддерживаемых опций для unameIS

$ 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.