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.