Programing

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

lottogame 2020. 2. 15. 19:36
반응형

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


내가 입력 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스크립트 를 작성할 때 유용 합니다.


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

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

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

cat /proc/cpuinfo

또는:

grep flags /proc/cpuinfo

"플래그"매개 변수 아래에서 다양한 값을 표시됩니다 참조 " ? 어떻게하면 깃발을 / proc 디렉토리 / cpuinfo의 의미에서 그 중 하나의 이름은" lm: Long Mode( - 64 : 인텔 (64)로 알려진 AMD64, 즉 64 비트 유능한)

lm ==> 64-bit processor

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

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

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


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

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

uname -m

전화 할 수도 있습니다

getconf LONG_BIT

32 또는 64를 반환


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

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

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

명령:

getconf LONG_BIT

대답:

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

명령

$ arch    

에 해당

$ uname -m

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


데비안 에서 소프트웨어를 빌드 할 때 특히 궁금 합니다. (설치된 데비안 시스템은 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 아키텍처가 아키텍처를 어떻게 추론하는지 모르겠지만 문서 또는 소스 코드를 볼 수 있습니다 (dpkg 아키텍처 및 대부분의 dpkg 시스템은 Perl입니다).


#include <stdio.h>

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

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


그 시스템은 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

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

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

hello world를 컴파일하려고 시도 할 수 있습니다.

$ 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, 제거되지 않음

답변 "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'!


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

echo $HOSTTYPE

결과:

i386 -> 32 비트

x86_64 -> 64 비트

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


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

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

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


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

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.


사용 가능한 바이너리 (예 : 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입니다.


$ grep "CONFIG_64" /lib/modules/*/build/.config
# CONFIG_64BIT is not set

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

sudo lshw -class cpu

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


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

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

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

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


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

참고 : https://stackoverflow.com/questions/246007/how-to-determine-whether-a-given-linux-is-32-bit-or-64-bit



반응형