주어진 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은 uname
32 비트 아키텍처임을 의미합니다. 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_64
32 비트 i686
등 입니다 .
먼저 Virtual Box를 다운로드해야합니다. 그런 다음 새로운 32 비트 Linux를 선택하십시오. 그런 다음 Linux를 사용하여 부팅하십시오. 부팅되면 32 비트이고 그렇지 않으면 64 비트입니다.
'Programing' 카테고리의 다른 글
React에서 상태와 소품의 차이점은 무엇입니까? (0) | 2020.02.15 |
---|---|
하이픈으로 구분 된 케이스의 이름은 무엇입니까? (0) | 2020.02.15 |
C #에서 #region에 해당하는 Java (0) | 2020.02.15 |
Java에서 목록을 배열로 변환 (0) | 2020.02.15 |
두 개의 중첩 된 목록의 교차점을 찾으십니까? (0) | 2020.02.15 |