web-dev-qa-db-ja.com

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

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

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

10
Daniel Cukier
uname -a

カーネルを教えてくれます-エンドビットはアーキテクチャを教えてくれます。

2つの例:

私のマック:

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

15
Rich Bradshaw

uname -mは、カーネルがコンパイルされるアーキテクチャを提供します。 i686を出力する場合、カーネルは32ビットです。x86_64を出力する場合、Intel/AMDチップを使用していると仮定すると、64ビットになります。

12
drrlvn

最も正確な方法は

getconf LONG_BIT

ここでは正確に64

これで見つかりました ヒント

getconfはパッケージlibc-bin(ubuntu上)からのものです

9
Aquarius Power

簡単だが詳細なレポートシステム(CPU、カーネル、コアOSソフトウェア)とカーネルだけでなくが必要な場合は、次の小さなbashスクリプトを使用して迅速に答えます。

32ビット/ 64ビットCPUの特性とS/W)について十分に知っている場合は、単に便利です。あまり詳しくなく、 "システム"と考えている場合が32ビットまたは64ビットの場合、混乱することなく、真実がより複雑になる可能性があることを発見するのに役立ちます(システムの一部は64ビットである場合があります)。

繰り返しますが、このスクリプト(および回答)は文字通りの質問「私のLinuxカーネルが32ビットまたは64ビットで実行されているかどうかを知るにはどうすればよいですか?」ではありません。 CPUのアーチとコアOSSWも知りたい人のために。

レポートの例

これらは、かなり珍しいケースの例です。

ミニスクリプトからのレポート(経験豊富なユーザー向け)

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) https://stackoverflow.com/questions/246007/how-to-determine-whether-a-given-linux- is-32-bit-or-64-bit b) https://unix.stackexchange.com/a/134394/73271

2
ndemou

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

unameの出力は、一目で ウィキペディアの例の表 が示すように、あまりにも多様すぎて役に立ちません。最も信頼できる方法はgetconf LONG_BITに示すように アクエリアスパワーの答え 。これはプロセッサアーキテクチャに関係なく機能するため、x86と同様に、ARM、Power、またはMIPSでも問題ありません。

0
Toby Speight

実行しているプラ​​ットフォームのみを表示したい場合は、次を使用できます。

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
0
a_m0d