Linuxカーネルが32ビットと64ビットのどちらで実行されているかを知るにはどうすればよいですか?


10

/ proc / cpuinfoで猫を実行すると、clflushsize:64の行が表示されます

これは私のカーネルが64ビットで実行されていることを意味しますか?

回答:


15
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ビット


3
この答えは間違っています。エンドビットは、カーネルアーキテクチャではなく、プロセスに公開されているアーキテクチャを示します。このリンクを参照してください
David Schwartz

12

uname -mカーネルがコンパイルされたアーキテクチャを提供します。印刷されるi686場合、カーネルは32ビットですx86_64。それが64ビットの場合、Intel / AMDチップがあると仮定します。


i386古い32ビットプラットフォームにも存在する可能性があります(一部のパッケージがコンパイルされたのを見たこともありますが、i586それがによって出力されるかどうかは不明unameです)
a_m0d

3
この答えは間違っています。uname -mカーネルがこの特定のプロセスに公開することを選択したアーキテクチャを提供します。カーネルのネイティブアーキテクチャではありません。このリンクを参照してください
David Schwartz、

@David Schwartz:あなたのコメントは正当な理由もなく厳しすぎるし、あなたが代替案を投稿していないという事実は、それをさらに悪く見せている。とにかく、デフォルトでuname -m 実際のアーキテクチャ報告されることに注意してください。そうでない場合、おそらく管理者は本当に他のアーキテクチャを使用していると信じてほしいと本当に望んでおり、最善の策は彼が何をしているか知っていることを受け入れることです。あなたが管理者で、いじりをしsetarchているなら、とにかくあなたはすでによりよく知っています。
ndemou

答えが間違っているという本当の事実の陳述について何が過酷なのか私にはわかりません。「それをさらに悪化させる」とはどういう意味ですか。たぶん仕方がない。多分良い方法があります。たまたま知りませんでしたので、この質問には答えませんでした。コメントの終わりに関しては、私は同意しません。スクリプトは使用することができ、setarch実際に使用しますuname -m。別の何かを返す原因となることを知らなくても、そのようなスクリプトを呼び出すことができます。これらの種類の問題が、OPが要求する理由である可能性があります。
David Schwartz

@ndemou管理者は、init32ビットであると考えるアプリケーションを含むすべてのアプリケーションがシステムをセットアップした可能性があります。この状況は、32ビットのユーザー空間を持つ64ビットのカーネルです。多くのコンパイルシステムは、uname -mコンパイラフラグ(GDBのフラグなど)を決定するために依存していますが、それらは偽のパーソナリティで提供される必要があります。しかし、他の一部のユーザー空間アプリケーションは、パーソナリティに関係なく、(たとえば、いくつかの低レベルのニーズのために)どのタイプのカーネルを持っているかを知りたがることがあります。
Ruslan


2

あなたがしたい場合は簡単ですが、詳細なレポートシステム(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


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 -iprints GenuineIntel、これは彼が探しているものではありません。
drrlvn '26 / 08/26

そしてUnknownMac上。
リッチブラッドショー、

i386私のマシンでプリント!
a_m0d 2009

0

CLFLUSHSIZEプロセッサの動作モードについては何も教えてくれません。この回答によれば、それはキャッシュのフラッシュ可能な最小単位を指します。あなたの場合、キャッシュラインは64バイト単位で読み書きされます。

unameWikipediaの例の表を見るとわかるように、出力は変動が大きすぎて有用ではありません。最も信頼できる方法はgetconf LONG_BITAquarius Powerの回答にあるとおりです。これは、プロセッサアーキテクチャに関係なく機能するため、x86の場合と同様に、ARM、Power、またはMIPSでも使用できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.