주어진 Linux가 32 비트인지 64 비트인지 확인하는 방법은 무엇입니까?


470

내가 입력 uname -a하면 다음과 같은 출력이 나타납니다.

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 i686 i686 i386 GNU/Linux

주어진 OS가 32 또는 64 비트임을 어떻게 알 수 있습니까?

configure스크립트 를 작성할 때 유용 합니다. 예를 들어, 어떤 아키텍처를 구축하고 있습니까?

답변:


735

시도하십시오 uname -m. 어느 것이 부족 uname --machine하고 출력합니다.

x86_64 ==> 64-bit kernel
i686   ==> 32-bit kernel

그렇지 않으면 Linux 커널이 아니라 CPU 에 대해 다음을 입력하십시오.

cat /proc/cpuinfo

또는:

grep flags /proc/cpuinfo

"flags"매개 변수 아래에 다양한 값이 표시됩니다. " / proc / cpuinfo의 플래그는 무엇을 의미합니까? "를 참조하십시오. 그 중 하나의 이름은 lm다음과 같습니다. Long Mode( x86-64 : amd64, Intel 64라고도 알려진 64 비트, 즉 64 비트 유능한)

lm ==> 64-bit processor

또는 사용lshw (언급 한 바와 같이 아래 로 작센의 롤프 없이) sudo(바로 CPU 폭을 grepping 용) :

lshw -class cpu|grep "^       width"|uniq|awk '{print $2}'

참고 : 32 비트 커널이 설치된 64 비트 CPU가있을 수 있습니다 .
( ysdx 는 자신의 답변 에서 "현재 요즘 시스템은 다중 아키텍처 가 될 수 있으므로 어쨌든 의미가 없습니다. 컴파일러의 기본 대상을 찾고 싶을 것입니다."


3
grep 플래그 / proc / cpuinfo는 CPU가 64 비트인지 알려줍니다. 질문을 이해하면서 OS에 관한 것이 었습니다. uname -m은 "i686"만 알려줍니다.
— Kim Stebel

3
64 비트 하드웨어에 32 비트 커널이 있고 'uname -m'(Debian)에서 "x86_64"를 얻습니다. uname 매뉴얼 페이지에 -m은 시스템 하드웨어 이름을 표시하므로 올바르게 보입니다.
— Tony Meyer

1
나는 32 비트 커널 64 비트 컴퓨터 / 프로세서에서 실행, 무엇을하고자하는 경우 uname -i, uname -p그리고 uname -m쇼를?
— ruben2020

4
tm과 lm이 모두 있으면 어떻게됩니까?
— Javier Novoa C.

4
@JavierNovoaC. tm (열 모니터)는 자동 시계 제어를 나타냅니다. 32 비트 프로세서를 구별하는 것과는 아무런 관련이 없습니다. 실제로 64 비트 CPU가있는 경우에만 lm (긴 모드)이 존재합니다. 그렇기 때문에 작품에만 의존해야합니다. 그렇지 않으면 Thomas Watnedal의 답변이 최고입니다. 이 답변은 틀 렸으며 많은 사람들이 plz 사회자가 그것에 대해 무언가를 잘못하고 있습니다.
— Issam T.

153

64 비트 플랫폼을 실행중인 경우 x86_64 또는 uname -a 의 출력에서 ​​매우 유사한 것이 표시됩니다.

특정 머신 하드웨어 이름을 실행하려면

uname -m

전화 할 수도 있습니다

getconf LONG_BIT

32 또는 64를 반환


4
uname -m출력 x86_64 getconf LONG_BIT출력 32어느 것이 맞습니까 ?? : \
— Stephan

10
즉, CPU는 64 비트이지만 64 비트 운영 체제를 사용할 수는 있지만 32 비트 운영 체제 만 설치 한 것입니다.

1
스티브 켐프 (OS가 32 비트하지만 64 비트 응용 프로그램을 실행하는 자사의 능력이 마음에 오는 2009 맥북에 맥 OS X 10.5) 때문에주의해야 옳다
— jww

1
는 uname -mQP가가의 유용하지 않다 configure가 잘못된 결과를 제공 할 수있다. 은 getconf LONG_BIT지정된에 의해에 대한 올바른 크기하지 않을 수 있습니다 C 라이브러리의 기본 비트 크기 얻을 CC, 컴파일러.
— user3710044 10

2
getconf LONG_BIT32 비트를 제공 할 수 있으며 32 비트 응용 프로그램 (일반적으로 32 비트 사용자 영역을 실행하는 64 비트 커널)으로 빌드되었습니다.
— ysdx

42

lscpu CPU에 관한 다른 정보들 중에서 다음을 나열합니다 :

Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
...

3
현재 OS의 현재 사용자 공간에 유용하지만 신뢰할 수없는 CPU의 물리적 기능을 출력합니다.
— user3710044

33

쉬운 결정을위한 또 다른 유용한 명령은 다음과 같습니다.

명령:

getconf LONG_BIT

대답:

  • OS가 32 비트 인 경우 32
  • 64, OS가 64 비트 인 경우

2
이 명령이 리턴 (32) : 아이테니엄 64에 HP-UX 11.31i의 경우 사실이 아니다
— 가브리엘 Hautclocq

나는 모든 질문자가 "64 비트"의 의미에 달려 있다고 생각합니다. 그것은 정수의 자연 크기를 의미하는 데 사용되었지만 이제는 종종 주소 지정 크기를 의미하는 데 사용됩니다.
— Toby Speight

12

명령

$ arch    

에 해당

$ uname -m

하지만 입력하는 속도가 두 배 빠릅니다


2
동의하지만 대부분의 개발자에게는 타이핑 속도가 문제가되지 않을 것이라고 확신합니다.
— williamcarswell

2
커널이 지원할 수있는 프로세스 유형을 반환합니다. 64 비트 커널에서 32 비트 사용자 공간을 실행하는 것이 가능하고 심지어 합리적입니다.
— user3710044

1
arch 명령은 모든 유닉스 시스템에서 사용 가능하지는 않지만 uname이어야합니다.
— Gabriel Hautclocq

11

데비안 에서 소프트웨어를 빌드하기 위해 특별히 궁금했습니다. 합니다. (설치된 데비안 시스템은 32 비트 커널, 라이브러리 등이있는 32 비트 버전이거나 64 비트 용으로 컴파일 된 64 비트 버전 일 수 있습니다. 32 비트 호환 모드가 아닌 비트).

데비안 패키지 자체는 플랫폼 아키텍처를 포함하여 모든 메타 데이터로 패키지를 실제로 만들 때 (물론) 아키텍처가 무엇인지 알아야합니다. dpkg를 아키텍처 . 여기에는 현재 호스트뿐만 아니라 빌드하도록 구성된 것이 포함됩니다. (일반적으로 이것들은 동일합니다.) 64 비트 컴퓨터에서 출력 예 :

DEB_BUILD_ARCH=amd64
DEB_BUILD_ARCH_OS=linux
DEB_BUILD_ARCH_CPU=amd64
DEB_BUILD_GNU_CPU=x86_64
DEB_BUILD_GNU_SYSTEM=linux-gnu
DEB_BUILD_GNU_TYPE=x86_64-linux-gnu
DEB_HOST_ARCH=amd64
DEB_HOST_ARCH_OS=linux
DEB_HOST_ARCH_CPU=amd64
DEB_HOST_GNU_CPU=x86_64
DEB_HOST_GNU_SYSTEM=linux-gnu
DEB_HOST_GNU_TYPE=x86_64-linux-gnu

해당 변수 중 하나만 인쇄하거나 dpkg -architecture 에 대한 명령 행 옵션을 사용하여 해당 값에 대해 테스트를 수행 할 수 있습니다 .

dpkg-architecture가 아키텍처를 어떻게 추론하는지 모르겠지만 문서 또는 소스 코드를 볼 수 있습니다 (dpkg-architecture 및 dpkg 시스템의 대부분은 Perl입니다).


패키지를 설치할 dpkg --architecture필요가없는 호스트 시스템 아키텍처를 얻기 위해 다음 을 사용할 수 있습니다 dpkg-dev.
— Mark Longair

이것은 dpkg: error: unknown option --architecture14.04의 dpkg 1.17.5ubuntu를 생성 합니다. dpkg-architecture (dpkg-dev가 설치된 상태)는 정상적으로 작동합니다.
— timurb

2
이 명령 dpkg --print-architecture은 데비안에서 영원히 작동했습니다. 이것은 작동하지만 데비안에 국한되며 파생 상품입니다.
— user3710044

11
#include <stdio.h>

int main(void)
{
    printf("%d\n", __WORDSIZE);
    return 0;
}

2
작동하지만 Linux에서 stdio.h의 구현 세부 사항 인 것처럼 보이며 더 나은 솔루션이 있습니다 (예 : limits.h, 사용하지 마십시오).
— user3710044

10

i686 대신 64 비트 OS가있는 경우 x86_64또는 ia64의 결과가 표시 uname -a됩니다. 이 두 문자열 중 하나도 없습니다. 32 비트 OS가 있습니다 (CPU가 64 비트가 아님을 의미하지는 않습니다).


1
커널이 지원할 수있는 프로세스 유형을 반환합니다. 64 비트 커널에서 32 비트 사용자 공간을 실행하는 것이 가능하고 심지어 합리적입니다.
— user3710044

uname64 비트 OS를 나타내는 다른 값이 출력에 있습니다. 모든 세계가 x86 또는 Itanium은 아닙니다.
— Toby Speight

6

그 시스템은 32 비트입니다. iX86은 uname32 비트 아키텍처임을 의미합니다. 64 비트라면

Linux mars 2.6.9-67.0.15.ELsmp #1 SMP Tue Apr 22 13:50:33 EDT 2008 x86_64 i686 x86_64 x86_64 GNU/Linux

1
커널이 지원할 수있는 프로세스 유형을 반환합니다. 64 비트 커널에서 32 비트 사용자 공간을 실행하는 것이 가능하고 심지어 합리적입니다.
— user3710044

6

요즘에는 시스템이 다중 아키텍처가 될 수 있으므로 어쨌든 의미가 없습니다. 컴파일러의 기본 대상을 찾을 수 있습니다.

$ cc -v 2> & 1 | grep ^ 대상
대상 : x86_64-pc-linux-gn

당신은 안녕 세계를 컴파일하려고 할 수 있습니다 :

$ echo 'int main () {return 0; } '| cc -xc--o foo
$ 파일 foo
foo : ELF 64 비트 LSB 실행 파일, x86-64, 버전 1 (SYSV), 동적으로 링크 된 인터프리터 /lib64/ld-linux-x86-64.so.2, GNU / Linux 2.6.32, BuildID [sha1] = b114e029a08abfb3c98db93d3dcdb7435b5bba0c, 제거되지 않음

1
때문에 cc -v | grep …어쨌든 컴파일러 별을이고, 하나는 사용할 수 cc -dumpmachinegrepping 필요로하지 않고 GCC에 의해뿐만 아니라 지원된다.
— Anton Samsonov

질문에 구성 스크립트에 대한 것이기 때문에 아마도 가장 유용하고 관련이있는 대답 일 것입니다. 중요한 모든 경우 (64 비트 OS의 32 비트 사용자 chroot, 외부 아키텍처에 대한 크로스 컴파일 및 나머지 포함)에서 원하는 것을 수행합니다.
— Toby Speight

5

답변 "getconf LONG_BIT" 와 관련하여 .

'C'에서 간단한 함수를 작성했습니다.

/*
 * check_os_64bit
 *
 * Returns integer:
 *   1 = it is a 64-bit OS
 *   0 = it is NOT a 64-bit OS (probably 32-bit)
 *   < 0 = failure
 *     -1 = popen failed
 *     -2 = fgets failed
 *
 * **WARNING**
 * Be CAREFUL! Just testing for a boolean return may not cut it
 * with this (trivial) implementation! (Think of when it fails,
 * returning -ve; this could be seen as non-zero & therefore true!)
 * Suggestions?
 */
static int check_os_64bit(void)
{
    FILE *fp=NULL;
    char cb64[3];

    fp = popen ("getconf LONG_BIT", "r");
    if (!fp)
       return -1;

    if (!fgets(cb64, 3, fp))
        return -2;

    if (!strncmp (cb64, "64", 3)) {
        return 1;
    }
    else {
        return 0;
    }
}

좋은 생각이야, 'getconf'!


5
바보 같은 생각! 사용 CHAR_BIT*sizeof(void*)또는 __WORDSIZEC.에서
— ceving

3
아니요. 어리석지 않습니다. 예를 들어 32 비트 실행 파일이 있고 시스템이 64 비트 파일을 지원하는지 확인하려고합니다.
— Ludvig A. Norin

GNU-C 라이브러리에서 long 의 기본 길이를 얻습니다 .
— user3710044 10

1
64 비트 커널 또는 32 비트 사용자 공간에서 32 비트 사용자 공간을 실행하는 경우 OS가 32 비트라고 말하기 때문에 실제로 잘못되었습니다.
— Ruslan

강력하게 사용하지 않도록 권장합니다 fgets: stackoverflow.com/questions/16323185/...
— ceving

4

환경 변수를 사용하여 확인할 수도 있습니다.

echo $HOSTTYPE

결과:

i386 -> 32 비트

x86_64 -> 64 비트

http://www.sysadmit.com/2016/02/linux-como-saber-si-es-32-o-64-bits.html 에서 추출


1
이것은 /bin/bash환경 변수가 아니기 때문에 내장 변수입니다. 이미 Bash에 의존하고 있다면 정상적으로 작동합니다. 그러나 결과가 될 수있다 i386, i486, i586, i686등 때문에주의해야합니다.
— user3710044

3

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

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

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


2
Bash는 (그것이 가능 할까?) 64 비트 int를 사용할 수 있도록 컴파일되어있다. 그 타입이 현재 사용 가능하다. 현재는 보통 32bit 시스템이 "long long"타입을 사용할 것이다
— user3710044

2
데비안의 bash는 2008 년부터 64 비트 산술을 사용하도록 컴파일되었습니다. 이 답변은 stackoverflow가 존재하기 전에 깨졌습니다.
— Peter Cordes

3

getconf 는 가장 적은 시스템 호출을 사용합니다.

$ strace getconf LONG_BIT | wc -l
253

$ strace arch | wc -l
280

$ strace uname -m | wc -l
281

$ strace grep -q lm /proc/cpuinfo | wc -l
301

2

1을 32만큼 왼쪽으로 이동하고 1을 얻으면 시스템은 32 비트입니다. 1을 64만큼 왼쪽으로 시프트하고 1을 얻으면 시스템은 64 비트입니다.

다시 말해,

if echo $((1<<32)) gives 1 then your system is 32 bit.

if echo $((1<<64)) gives 1 then your system is 64 bit.


"long longs"를 사용하는 bash와 동일한 문제입니다.
— user3710044 10

32 비트를 반환하면 100 % 32를 실행한다고 확인했기 때문에 이것은 나를 위해 일했습니다. 64를 반환하면 bash가 오랫동안 컴파일 될 수 있습니다.
— JCM

1

사용 가능한 바이너리 (예 : initramfs)가 심각하게 제한되어 있다면 동료들은 다음과 같이 제안했습니다.

$ ls -l /lib*/ld-linux*.so.2

내 ALT Linux 시스템에서 i586은 /lib/ld-linux.so.2있고 x86_64는 /lib64/ld-linux-x86-64.so.2입니다.


나는 그중 세 가지를 얻었습니다. 하나는 32 명, 64 명은 mx32 명입니다.
— user3710044

예, 수많은 64 비트 라이브러리를 반환하지 않으면 32 비트 OS를 실행하는 것입니다. ls -aR | grep 64 | grep -v proc
— JCM


1

나는 지금까지 아무도 언급하지 않았다고 믿을 수 없다.

sudo lshw -class cpu

CPU 하드웨어의 속도, 수량, 크기 및 기능에 대한 세부 정보를 얻습니다.


1

64 비트 또는 32 비트를 가져 오는 간단한 스크립트

        if $(getconf LONG_BIT | grep '64'); then
           echo "64 bit system"
        else
            echo "32 bit system"
        fi

1

[ -z `uname -m | grep 64` ] && echo "32-bit" || echo "64-bit"

일반적으로 64 비트는 x86_6432 비트 i686등 입니다 .


-6

먼저 Virtual Box를 다운로드해야합니다. 그런 다음 새로운 32 비트 Linux를 선택하십시오. 그런 다음 Linux를 사용하여 부팅하십시오. 부팅되면 32 비트이고 그렇지 않으면 64 비트입니다.


2
이것은 시스템이 32 비트인지 64 비트인지를 결정하는 데있어 아주 중요한 방법입니다.
— marlar

그러나 이것은 실제로이 문제를 해결하는 방법입니다. 마크 업하겠습니다.
— firo

이것은 홀수에서 짝수를 말할 수있는 방법을 생각 나게합니다. 프로그래머는 최하위 비트를 볼 것입니다. MS SQL 전문가는 짝수와 홀수를위한 두 개의 테이블을 생성하고 입력이 끝나는 위치를 찾습니다 ... figure
— Michael Shigorin
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.