Linux 커널이 32 비트 또는 64 비트로 실행 중인지 어떻게 알 수 있습니까?


10

/ proc / cpuinfo에서 고양이를 할 때 clflushsize와 함께 줄을 보여줍니다 : 64

이것은 내 커널이 64 비트로 실행되고 있음을 의미합니까?

답변:


15
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

My 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_6464 비트입니다. 인텔 / 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 관리자는 시스템을 포함한 모든 응용 프로그램 init이 32 비트라고 생각 하는 방식으로 시스템을 설정했을 수 있습니다 .이 상황은 32 비트 사용자 공간이있는 64 비트 커널입니다. 많은 컴파일 시스템은 uname -m컴파일러 플래그를 결정하는데 의존합니다 ( 예 : GDB의 플래그). 그러나 일부 다른 사용자 공간 응용 프로그램은 성격과 상관없이 어떤 커널 유형 (예 : 일부 하위 수준 요구 사항)이 있는지 알고 싶어 할 수 있습니다.
Ruslan

9

가장 정확한 방법은

getconf LONG_BIT

여기 정확히 보여줍니다 64

에서 발견

getconf 패키지 libc-bin (우분투)에서


2

당신이 원하는 경우 쉽지만 자세한 보고서 시스템 (CPU, 커널과 코어 OS 소프트웨어) 약 뿐만 아니라 커널을 여기에 신속하게 당신에게 해답을 줄 것이다 작은 bash는 스크립트입니다.

32 비트 / 64 비트 CPU와 소프트웨어의 특성에 대해 충분히 알고 있다면 간단합니다. 잘 모르고 "시스템" 이 32 비트 또는 64 비트 라고 생각 하면 혼란을주지 않으면 서 진실이 더 복잡 할 수 있다는 것을 발견하는 데 도움이 될 것입니다 (시스템의 일부는 64 비트 일 수도 있고 다른 32 비트 일 수도 있습니다).

이 스크립트 (및 답변)는 " 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

더 많은 정보를 알고 싶다면 대부분의 정보를 얻을 수있는이 두 페이지를 읽으십시오 .a ) https : //.com/questions/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 -iGenuineIntel그가 찾고있는 것이 아닌 prints .
drrlvn

그리고 UnknownMac에서.
Rich Bradshaw

i386내 기계에 인쇄 합니다!
a_m0d

0

CLFLUSHSIZE프로세서의 작동 모드에 대해서는 아무 것도 알려주지 않습니다. 이 답변 에 따르면 , 이는 가장 작은 플러시 가능 캐시 단위를 나타냅니다. 귀하의 경우 캐시 라인은 64 바이트 단위로 읽고 씁니다.

unameWikipedia의 예제 테이블을 한눈에 볼 수 있듯이 출력이 너무 다양하여 유용하지 않습니다. 가장 신뢰할 수있는 방법은 getconf LONG_BIT에서 쇼로 물병 전원의 대답 . 이것은 프로세서 아키텍처에 관계없이 작동하므로 x86에서와 같이 ARM, Power 또는 MIPS에서 가정에 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.