回答:
uname -a
カーネルを教えてくれます-エンドビットはアーキテクチャを教えてくれます。
2つの例:
私のMac:
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
。別の何かを返す原因となることを知らなくても、そのようなスクリプトを呼び出すことができます。これらの種類の問題が、OPが要求する理由である可能性があります。
init
32ビットであると考えるアプリケーションを含むすべてのアプリケーションがシステムをセットアップした可能性があります。この状況は、32ビットのユーザー空間を持つ64ビットのカーネルです。多くのコンパイルシステムは、uname -m
コンパイラフラグ(GDBのフラグなど)を決定するために依存していますが、それらは偽のパーソナリティで提供される必要があります。しかし、他の一部のユーザー空間アプリケーションは、パーソナリティに関係なく、(たとえば、いくつかの低レベルのニーズのために)どのタイプのカーネルを持っているかを知りたがることがあります。
あなたがしたい場合は簡単ですが、詳細なレポートシステム(CPU、カーネルおよびコアOSソフトウェア)と約だけではなく、カーネルを、次にここに迅速にあなたに答えを与える小さなbashスクリプトです。
32ビット/ 64ビットCPUとS / Wの特性について十分に理解している場合、それは単に便利です。多くのことを知らず、「システム」が32ビットまたは64ビットであると思われる場合、混乱することなく、真実がより複雑になる可能性があることを発見するのに役立ちます。
繰り返しますが、このスクリプト(および回答)は、「Linuxカーネルが32ビットと64ビットのどちらで実行されているかを知るにはどうすればよいですか」という文字どおりの質問に対するものではありません。しかし、CPUのアーキテクチャとコアOS 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
詳細を知りたい場合は、私がほとんどの情報を入手した場所からこれら2つのページを読んでください。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
prints GenuineIntel
、これは彼が探しているものではありません。
Unknown
Mac上。
i386
私のマシンでプリント!
CLFLUSHSIZE
プロセッサの動作モードについては何も教えてくれません。この回答によれば、それはキャッシュのフラッシュ可能な最小単位を指します。あなたの場合、キャッシュラインは64バイト単位で読み書きされます。
uname
Wikipediaの例の表を見るとわかるように、出力は変動が大きすぎて有用ではありません。最も信頼できる方法はgetconf LONG_BIT
、Aquarius Powerの回答にあるとおりです。これは、プロセッサアーキテクチャに関係なく機能するため、x86の場合と同様に、ARM、Power、またはMIPSでも使用できます。