it-swarm-ko.tech

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

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

105
user2914

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

64 비트 예 :

[email protected]:~$ 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의 경우

99
Behrooz

간단 해! Arch 명령을 사용하십시오.

49
PHPst

@ behrooz 이 맞습니다. 불행히도 uname는 아키텍처를 알아야합니다. 실제로 아키텍처 목록을 찾고 있는데 질문에 대한 이 기사 를 찾았습니다. 에 관해서 uname -m :

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

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

grep flags /proc/cpuinfo

출력에서 다음을 찾으십시오 (같은 질문에 대해 this stackoverflow answer 에서 검색 된 모든 플래그)

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

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

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

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

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

21
Luchostein

Debian의 경우 :

내 PC에서

 ~> dpkg --print-architecture 
 AMD64 
 ~> dpkg --print-foreign-architectures 
 i386 

내 라즈베리 파이 2

 ~> dpkg --print-architecture 
 armhf 

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

getconf LONG_BIT

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

예 :

[email protected]:~$ getconf LONG_BIT
64
13
dannyw

Formake project 에서 syscap 사용

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

CPU 아키텍처 얻기 :

syscap info -Arch

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

syscap info -kernel -kernver
2
Alex

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

$ 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
minaev

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

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

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

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

man uname에서 :

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

# uname -i x86_64#

0
clusterdude

간단한 원 라이너를 찾고 있다면 이것이 64 또는 2를 반환하는 가장 신뢰할 수있는 솔루션입니다. 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을 나타냅니다. 8 비트 또는 16 비트 시스템에서 각각 0xFF 및 0xFFFF에서 각각 -1 인 시스템에 대해 어떻게 쉽게 확장되는지 알 수 있습니다.

0
b_laoshi