uname
내 RHEL 5.4 시스템에서 -a의 출력은 다음과 같습니다.
Linux <machine name> 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux
이는 하드웨어가 64비트(아마도 첫 번째 x86_64)이고 OS도 64비트(마지막 x86_64)라는 의미입니까?
또한 이 모든 x86_64 인스턴스는 무엇을 위한 것입니까?
32비트 운영 체제에 64비트 가상 머신을 설치할 수 있습니까? 아니면 그 반대로도 가능합니까?
답변1
하드웨어, 커널 및 사용자 공간 프로그램은 단어 크기가 다를 수 있습니다.
다음과 같은 경우 확인할 수 있습니다.CPU
flags
파일의 행을 검사하여 64비트, 32비트 또는 둘 다 지원되는지 여부를 확인할 수 있습니다/proc/cpuinfo
. 아키텍처 제품군에서 가능한 징후를 이해해야 합니다. 예를 들어, i386/amd64 플랫폼에서 이lm
플래그는 amd64를 지원하는 CPU를 식별합니다(이 플래그가 없는 CPU는 i386 전용입니다).grep -q '^flags *:.*\blm\b' /proc/cpuinfo # Assuming a PC
아키텍처를 쿼리하여 커널이 32비트인지 64비트인지 확인할 수 있습니다
uname -m
. 예를 들어i[3456]86
32비트인데 64비트x86_64
입니다 . 일부 아키텍처에서는 64비트 커널이 32비트 사용자 모드 프로그램을 실행할 수 있으므로uname -m
64비트 커널이 표시되더라도 64비트 라이브러리를 사용할 수 있다는 보장은 없습니다.[ "$(uname -m)" = "x86_64" ] # Assuming a PC
쿼리를 통해 사용자 공간에서 사용 가능한 항목을 확인할 수 있습니다.최하위 비트지원과
lsb_release
주문하다. 보다 정확하게는 지원되는 LSB 기능의 구분된 목록을lsb_release -s
인쇄합니다 .:
모든 특징에는 형태가 있습니다. 예를 들어, ix86 C 라이브러리의 가용성은 으로 표시되지만 amd64용 에뮬레이션 라이브러리는 로 표시됩니다. 그러나 모든 배포판이 사용 가능한 모든 LSB 모듈을 선언하는 것은 아니므로 이 방법으로 감지할 수 있는 것보다 더 많은 LSB 모듈이 있을 수 있습니다.module-version-architecture
core-2.0-ia32
core-2.0-amd64
와 같은 명령을 사용하기 위해 시스템의 아키텍처 프로그램이 어떤 아키텍처로 구축되었는지 확인할 수 있습니다
file /bin/ls
. 혼합 시스템도 가능합니다.ls
시스템에 64비트 프로그램이더라도 32비트 프로그램을 실행하기 위한 라이브러리가 설치되어 있을 수 있으며 그 반대의 경우도 있습니다(덜 일반적임).sizeof(void*)
또는 (C 컴파일러를 사용할 수 있다고 가정)을 인쇄하는 5줄 C 프로그램을 컴파일하여 개발에 선호되는 단어 크기를 확인할 수 있습니다sizeof(size_t)
. 명령을 실행하면 약간 덜 안정적인 방법으로 동일한 정보를 얻을 수 있습니다getconf LONG_BIT
.#include <stdio.h> int main() { printf("%d\n", (int)sizeof(void*)); return 0; }
가상 머신의 경우 32비트 시스템에서 64비트 가상 머신을 실행할 수 있는지 또는 그 반대로 실행할 수 있는지 여부는 가상 머신 기술에 따라 다릅니다. 특히 참조 32비트 Linux에 64비트 Linux 가상 머신을 설치하는 방법은 무엇입니까?
1 "워드 길이"는 "비트 수"의 일반적인 이름입니다. ² 누군가가 다른 대상 아키텍처를 사용하여 대체 C 컴파일러를 설치했지만 시스템 기본값을 그대로 두는 경우에는 신뢰할 수 없을 수
있습니다 .getconf
답변2
알고 싶은 uname
여러 x86_64 발생 :
x86_64 x86_64 x86_64
다음은 세 가지 값입니다."알 수 없는 경우 -p 및 -i를 생략합니다.")
-m, --machine
print the machine hardware name
-p, --processor
print the processor type or "unknown"
-i, --hardware-platform
print the hardware platform or "unknown"
에 속하지 않으므로 -p
주의 해 주십시오-i
POSIX 표준. 이 값은 unknown
데비안에 있으므로 uname은 x86_64를 한 번만 인쇄합니다. Red Hat/CentOS는 이 값을 정의합니다.
또한 읽어보세요:Linux는 어떻게 uname -m
정보를 얻나요?그리고uname -p와 uname -m 및 Arch 출력이 서로 다른 아키텍처를 출력하는 이유는 무엇입니까?.
답변3
구경하다man uname
.
64비트 시스템에서 32비트 프로그램을 컴파일하고 실행할 수 있지만(특별한 설정이 필요함) 32비트 시스템에서 64비트 바이너리를 실행할 수는 없습니다. 많은 가상 머신에도 동일하게 적용됩니다.하지만 전부는 아니다* . 따라서 64비트 커널이 있는 경우 하드웨어는 32비트일 수 없습니다.
바이너리의 비트수를 테스트하려면 를 실행하세요 file /path/to/the/program
.
* 이는 특정 가상 머신이 실행되는 수준에 따라 다릅니다. 호스트 CPU에서 바이너리 코드를 (거의) 직접 실행하는 가상 머신은 32비트 호스트에서 64비트 코드를 실행할 수 없습니다. 그것들시뮬레이션일부 CPU는 이를 수행할 수 있지만 에뮬레이션 수준으로 인해 효율성이 떨어집니다.