주어진 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.