Как узнать, работает ли мое ядро ​​Linux в 32-битной или 64-битной версии?

13169
Daniel Cukier

Когда я делаю cat в / proc / cpuinfo, она показывает строку с clflushsize: 64

Означает ли это, что мое ядро ​​работает на 64 битах?

10

6 ответов на вопрос

15
Rich Bradshaw
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 бит

Этот ответ неверен. Конечный бит говорит вам об архитектуре процесса, а не архитектуре ядра. Смотрите [эту ссылку] (http://pastebin.com/6GYN4MbD). David Schwartz 8 лет назад 3
10
drrlvn

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

Может также быть `i386` на более старых 32-битных платформах (и я даже видел некоторые пакеты, скомпилированные для` i586` - хотя я не уверен, будет ли это когда-либо выводиться `uname`) a_m0d 14 лет назад 0
Этот ответ неверен. `uname -m` дает вам архитектуру, которую ядро ​​выбирает для показа этому конкретному процессу, а не нативную архитектуру ядра. Смотрите [эту ссылку] (http://pastebin.com/NbZDr46f). David Schwartz 8 лет назад 3
@ Дэвид Шварц: Ваш комментарий слишком резок без веской причины, и тот факт, что вы не разместили никакой альтернативы, делает его еще хуже. В любом случае, обратите внимание, что по умолчанию `uname -m` * * сообщает о реальной архитектуре. Если это не так, то, скорее всего, администратор действительно хочет, чтобы вы поверили, что вы используете другую архитектуру, и вам лучше всего признать, что он знает, что делает. Если вы являетесь администратором и балуетесь с `setarch`, то вы все равно знаете лучше. ndemou 8 лет назад 0
Я не знаю, что сурово в истинном фактическом утверждении, что ответ неверен. Что вы имеете в виду, «заставляя это выглядеть еще хуже». Может быть, нет никакого способа. Может быть, есть хороший способ. Я не знаю, поэтому я не ответил на этот вопрос. Что касается конца ваших комментариев, я просто не согласен. Скрипты могут использовать и используют `setarch`, и вы можете вызывать такой скрипт, даже не подозревая, что он заставляет` uname -m` возвращать что-то другое. Возможно, возможно даже вероятно, что именно такие вопросы и являются причиной, по которой ОП задает вопрос. David Schwartz 8 лет назад 0
@ndemou администратор, возможно, настроил систему таким образом, что любое приложение, включая `init`, считает, что оно 32-разрядное: для этого используется 64-разрядное ядро ​​с 32-разрядным пользовательским пространством. Многие системы компиляции зависят от `uname -m` для определения флагов компилятора, например, для GDB, они должны быть снабжены поддельной индивидуальностью. Но какое-то другое пользовательское приложение может по-прежнему хотеть знать, какое у него ядро ​​(например, для некоторых низкоуровневых нужд), независимо от индивидуальности. Ruslan 7 лет назад 0
7
Aquarius Power

I think the most precise way is

getconf LONG_BIT 

here it exactly shows 64

found on this tip

getconf is from package libc-bin (on ubuntu)

1
a_m0d

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

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 14 лет назад 0
и "Неизвестно" на Mac. Rich Bradshaw 14 лет назад 0
печатает `i386` на моей машине! a_m0d 14 лет назад 0
0
Toby Speight

CLFLUSHSIZEничего не говорит вам о режиме работы процессора. Согласно этому ответу, это относится к наименьшей очищаемой единице кеша. В вашем случае строки кэша считываются / записываются в единицах по 64 байта.

unameвыходные данные слишком сильно различаются, чтобы быть полезными, как показывает таблица примеров из Википедии . Самый надежный метод, getconf LONG_BITкак показано в ответе Водолея . Это работает вне зависимости от архитектуры процессора, поэтому на ARM, Power или MIPS это как дома, как на x86.

0
ndemou

These four bash commands will tell you almost everything you'd like to know:

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

If the results seem contradictory please note the following facts:

  • You can run 32bit kernels on 64bit CPUs (but not the inverse)
  • You can run 32bit executables on 64bit kernels (but not the inverse)

and read this page https://stackoverflow.com/questions/246007/how-to-determine-whether-a-given-linux-is-32-bit-or-64-bit and this answer https://unix.stackexchange.com/a/134394/73271

Похожие вопросы