리눅스 커널 아키텍처를 결정하는 방법?


92

uname -muname -mRed Hat Enterprise Linux Server 릴리스 5.4 (Tikanga) 시스템에서 i686 및 i686 i386 출력을 제공합니다. 해당 머신에 Oracle Database 10g Release 2를 설치해야합니다. 그렇다면 커널 아키텍처가 32 비트인지 64 비트인지 어떻게 알 수 있습니까?


10
즉, 첫 번째 문장에 오타가 : uname -muname -m?
tshepang

비트 수 (32 또는 64)를 반환하는 Linux 명령 도 참조하십시오 . . uname -mi? 86 이 표시 되면 32 비트 시스템입니다.
Gilles


Gilles의 질문은 흥미로운 해결책을 제시합니다 getconf WORD_BIT.
Mikel

7
getconf WORD_BIT내 64 비트 우분투에서 32를 반환
minaev

답변:


90

i386과 i686은 모두 32 비트입니다.
x86_64는 64 비트입니다.

64 비트 예 :

behrooz@behrooz:~$ uname -a  
Linux behrooz 2.6.32-5-amd64 #1 SMP Mon Mar 7 21:35:22 UTC 2011 **x86_64** GNU/Linux

편집 :
참조 내 리눅스 ARM 32 또는 64 비트입니까? ARM


armv7l은 어떻습니까? 어쨌든 간단한 부울 응답을 가진 명령은 맛있습니다.
user7543

1
@ user7543 아직 64 비트 ARM이 없기 때문에 ARM 32 비트인데, 그렇게 할 때 다른 것이 될 것입니다.
Behrooz

답변 커뮤니티 위키를 만들어야한다고 생각하지만 방법을 모릅니다.
Behrooz

1
시도하십시오 : uname -m. 아키텍처 만 보여줄뿐입니다.
Alexej Magura


32

@behrooz 가 맞습니다. 불행히도 uname아키텍처를 알아야합니다. 사실, 나는 아키텍처 목록을 찾고 있었고 귀하의 질문에 대답하는 이 기사 를 찾았습니다 . 에 관해서 uname -m:

x86_64 GNU / Linux는 64 비트 Linux 커널이 실행 중임을 나타냅니다. i386 / i486 / i586 / i686을 참조하면 32 비트 커널입니다.

하드웨어가 64 비트 커널을 실행할 수 있는지 확인하려면

grep flags /proc/cpuinfo

출력에서 다음을 찾으십시오 ( 이 질문대해이 stackoverflow 답변 에서 검색 된 모든 플래그 )

  • lm 플래그는 Long 모드 CPU-64 비트 CPU를 의미합니다.
  • tm 플래그는 보호 모드-32 비트 CPU를 의미합니다
  • rm 플래그는 실제 모드를 의미합니다-16 비트 CPU

lm 플래그는 단순히 CPU가 64 비트를 지원함을 의미하거나 64 비트로 실행되고 있음을 의미합니까? 64 비트의 경우 x86_64 또는 32 비트의 경우 i? 86이 될 것이라는 것을 알고 아치에 의존하는 것이 좋습니다.
펭귄 359

1
@ penguin359는 CPU가 64 비트를 지원한다는 것을 의미합니다.
xenoterracide

@xeno이므로 커널 아키텍처를 결정하는 데 사용할 수 없습니다.
penguin359

@ penguin359 아니오, 대답이 명확하지 않습니까?
xenoterracide

1
@ penguin359이, 아니하지만, 그것은 당신의 OS가 64 비트를 실행하고 있는지 확인하는 것이 유용하고 그렇지 않은 경우 하드웨어,이 IMO 수있는 경우
xenoterracide

22

(편집 :이 답변은 잘못되었습니다. @Lizardx의 의견 덕분에)

Bash에서 정수 오버플로 사용 :

if ((1<<32)); then
  echo 64bits
else
  echo 32bits
fi

다른 프로세스를 호출하거나 파일을 여는 것보다 훨씬 효율적입니다.


3
똑똑하고 또한 칩 아키텍처가 무엇인지를 상기시켜줍니다
code_monk

2
우아하지만 불행히도 올바르지 않습니다. uname -m == i686 BUT if ((1 << 32)); then echo 64bits; fi == 64bits 이것은 64 비트 커널이 아닌 32 비트 PAE 커널입니다. CPU는 64 비트 가능하지만 amd64입니다. 문제는 커널 아치를 결정하는 방법이므로이 솔루션은 잘못된 결과를 낳습니다.
Lizardx

1
참고 ((POSIX에 의해 정의 된 Bashism되지 않고 mywiki.wooledge.org/Bashism#Conditionals
스티븐 페니

나는 32 비트 아키텍처에서 이것을 시도했으며 이것이 64 비트라고 생각합니다.
dannyw

작동 가능((1<<32)-1)
Ivijan Stefan Stipić

15

대한 데비안 :

내 PC에서

    ~> dpkg-인쇄 아키텍처
    amd64
    ~> dpkg-인쇄 외래 아키텍처
    i386

내 라즈베리 파이 2

    ~> dpkg-인쇄 아키텍처
    팔

1
이것은 checkinstallthx 와 함께 사용할 패키지 아키텍처를 결정할 때 가장 효과적입니다 !
물병 자리 힘

감사합니다. 나는 단지 "x86_64"보다는 "standard" "amd64"/ "i386"아키텍처 이름을 떨어 뜨릴 무언가를 찾고있다. 사전 컴파일 된 릴리즈의 이름을 지정할 때 아무도이 용어를 사용하지 않습니다.
클리프

12

가장 간단한 방법은 다음을 실행하는 것입니다.

getconf LONG_BIT

32 또는 64 비트인지에 따라 64 또는 32를 출력합니다.

예 :

dannyw@dannyw-redhat:~$ getconf LONG_BIT
64

2
이 답변은 잘못된 것입니다. 멀티 아치 지원을 활성화하고 64 비트 커널을 실행중인 경우 32 비트 설치 getconf LONG_BIT를 통해 64 비트 커널을 설치 하면 인쇄됩니다 32.
kenn

2

사용 SYSCAP을 에서 Formake 프로젝트

syscap을 사용하면 많은 시스템 속성을 검사하고 종속성을 테스트 할 수 있습니다. 휴대용 쉘 스크립트입니다.

CPU 아키텍처 얻기 :

syscap info -arch

커널 이름과 버전을 얻으십시오 :

syscap info -kernel -kernver

1

또 다른 방법은 일부 시스템 파일이 컴파일 된 아키텍처를 확인하는 것입니다.

$ file /usr/bin/ld
/usr/bin/ld: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.15, stripped

1
이것이 항상 커널 아키텍처가 아닌 시스템 아키텍처입니다. 더 많은 변형에 대해서는 SU에서이 답변을 참조하십시오 .
Gilles

이론적으로는 다를 수 있지만 실제 설치에서 일치하지 않을 가능성이 있습니까?
minaev

일부 배포판은 x86 버전에서 amd64 커널을 제공합니다. 나는 얼마나 많은 사람들이 그것들을 사용하는지 모르고 데비안 팝콘을 확인 했지만 다양한 통계 사이에는 상관이 없습니다. 주요 사용 사례는 32 비트 기본 OS가 있고 chroot 또는 VM에서 64 비트 OS를 실행하는 것입니다.
Gilles

@Gilles 당신은 당신이 새로운 x32 아키텍처에 대해 읽게 될 것을 좋아할 것입니다. wiki.debian.org/X32Port
베 루즈

0

또는 자체적으로 일부를 구현하려는 경우 uname 명령이 내부적으로 수행 하는 방식을 사용할 수 있습니다 .

#include <sys/utsname.h>
#include <stdio.h>

int main() {
    struct utsname name;
    uname(&name);
    printf("%s\n",name.machine);
    return 0;
}

0

를 사용하는 또 다른 방법이 uname있습니다.

보낸 사람 man uname:

... -i, --hardware-platform print the hardware platform or "unknown" ...

# uname -i x86_64 #


"알 수 없음"을 줄 때까지
Dagelf

0

간단한 원 라이너를 찾고 있다면 이것이 64 또는 32 를 반환하는 가장 신뢰할 수있는 솔루션입니다 . ARM을 실행 중인지 여부에 관계없이 bash 또는 sh를 사용하는 모든 시스템에서 작동해야합니다 .

이것은 시스템이 32 비트 또는 64 비트라고 가정합니다. 8-16 비트 또는 다른 비트 구조를 감지해야하는 경우 아래 설명을 참조하십시오.

[$ ((0xffffffff)) -eq -1] && 에코 32 || 에코 64

여기서 뭐하는거야?
논리는 매우 간단하며 컴퓨터가 부호있는 정수를 저장하는 방식으로 요약됩니다. 32 비트 아키텍처에는 부호있는 정수를 저장하는 데 사용할 수있는 32 비트 만 있고 64 비트 아키텍처에는 64 비트가 있습니다! 즉, 저장할 수있는 정수 세트는 유한합니다. 이 세트의 절반은 음수를 나타내고 절반은 양수를 나타냅니다. -1과 같은 부호있는 정수는 해당 아키텍처에 대해 주어진 비트 수로 저장할 수있는 가장 큰 숫자로 표시됩니다. 32 비트 시스템에서 -1은 16 진 값 0xFFFFFFFF (32 개의 이진 비트, 모두 1)로 표시 될 수 있습니다. 64 비트 시스템에서 0xFFFFFFFF는 기본 10 인 4,294,967,295로 변환되는 반면 0xFFFFFFFFFFFFFFFFFF는 -1을 나타냅니다. 8x 또는 16 비트 시스템뿐만 아니라 0xFF 및 0xFFFF에서 -1 인 시스템에 대해 어떻게 쉽게 확장되는지 확인할 수 있습니다.

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