скажет вам ядро - последний бит скажет вам архитектуру.
Два примера:
Мой мак:
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
Если вы хотите видеть только ту платформу, на которой вы работаете, вы можете использовать
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)