2012-04-13 4 views
7

Linux 커널이 32 비트인지 64 비트인지를 확인해야하는 bash 스크립트를 작성해야합니다.Linux 용 32 비트/64 비트 커널을 확인하는 방법

나는 uname -a 명령을 사용하고 있으며, x86_64 결과를 제공합니다. 하지만 나는 일반적인 방식으로 사용할 수 없다고 믿는다. 왜냐하면 x86 아키텍쳐를 사용하지 않으면 결과가 다를 수 있기 때문이다.

Linux 용 32 비트/64 비트 커널을 확인하는 방법은 무엇입니까? 이에 완전히 휴대용 경우

getconf LONG_BIT 

하지만 확실하지 않다 :

uname -a | grep 64 
+0

"설치"라고 할 때 커널을 의미합니까? 32 비트 설치로 64 비트 커널을 사용할 수 있기 때문입니다. –

+0

예 ... 커널 ... 감사합니다. – VJS

답변

-2

그렙 모든 다른 아키텍처.

+2

커널이 64 번 컴파일 된 경우 오류가 발생합니다. 서버의 이름이'blade64A '인 경우도 마찬가지입니다. –

+1

'uname -i | 대신 grep 64 '를 사용하십시오. –

+0

@David Schwartz : 나는 이것에서 조금 새롭고 생각을하지 않았다. 조금 설명해 주시겠습니까? 엄청 고마워 !! – VJS

5

당신은 long int의 크기에 맞게 시스템을 조회 할 수 끝나면 uname 출력에서 ​​'64'에 대한

1

/proc/cpuinfo에서 lm (긴 모드) 플래그를 검색하십시오. 이것이 사실이라면 64 비트 프로세서가 있음을 의미합니다. 간단한 grep은이 정보를 제공해야합니다.

커널 버전에 대해서는 uname -a 정보에서 언제나 grep 할 수 있습니다. uname 프로그램의 소스를 찾아서 악의적 인 호스트 이름으로 인한 불일치를 줄일 수 있습니다.

+2

이것은 i386/x86_64에서만 작동합니다. 한때 POWER 머신에서 작업 했었고'/ proc/cpuinfo'의 포맷은 완전히 다른데 훨씬 더 콤팩트하고 이런 플래그는 없었습니다. –

+0

@above/proc/cpuinfo는 물리적 비트와 가상 비트의 수를 제공합니다. 파워 머신에서 작업하는 동안이 정보를 받습니까 ?? 우리를위한 다음 단계는이 정보를 이해하는 것입니다. 나는 내 부분에 노력하고있다. 한 가지 더 : 저는 C의 int 크기를 사용하여 기계의 단어 크기를 결정할 수 있다고 생각합니다. –

+0

@prathmeshkallurkar 더 이상 해당 컴퓨터에 액세스 할 수 없지만 정보가 매우 간단하다는 것을 기억합니다. CPU 당 4 줄, 모델 이름 만 있으면 거의 없습니다. 사용 가능한 비트 정보가 있더라도 확실히 x86과 다른 형식입니다. –

1

나는 다음을 생각해 냈습니다. init (일부 배포자는 다른 로더로 전환했지만 합리적으로 자주 사용되는 목록을 쉽게 얻을 수 있어야 함)을 사용하고 a.out이 아닌 ELF 또는 다른 이국적인 실행 가능 형식을 사용한다고 가정합니다. 이것들은 대부분의 시스템에 대해서는 정당한 가정으로 보입니다. 그러나 임베디드 시스템 등에서는 아마도 깨질 수 있습니다. 여전히 적응할 수 있어야합니다 (init 프로세스 또는 동등 물을 받아 file을 사용하여 비트를 검사하십시오). 루트로 실행하는 경우 파일 경로를 거치지 않고 file $(sudo readlink -e /proc/1/exe)을 사용할 수 있습니다 (PID 1은 init 일 가능성이 높습니다).

if file /sbin/init | fgrep 'ELF 64-bit' &>/dev/null; then 
    echo "64-bit" 
else 
    echo "not 64-bit" 
fi 
+0

이 접근 방식의 문제점은 64 비트 커널을 실행할 때 32 비트 실행 파일을 사용할 수 있다는 것입니다. – Job

+0

@Job 당신은 옳았지 만,'init' (PID 1)은 첫 번째 프로세스로 실행되기 때문에 전체적으로 시스템의 비트를 결정한다고 생각합니다. –

+0

글쎄, 기술적으로는'init'이 64 비트 커널에서 32 비트가 될 수 있어야한다고 생각하지만, 어떤 "정상적인"시스템이라면 여러분의 접근 방식은 괜찮을 것입니다. – Job

15

질문은 오히려 당신이 32 또는 64에 있는지 알면 무엇을 성취 할 계획입니까? 가상의 128 비트 환경에 대한 결과는 무엇입니까? 그리고 실제로 N-bitness에 대해 테스트되는 부분은 무엇입니까? CPU는 64 비트 모드에서 실행을 지원할 수 있지만 환경은 32 비트입니다. 또한 환경 자체가 혼합 모드 일 수 있습니다. 64 비트 커널을 32 비트 사용자 공간으로 실행하는 것을 고려해보십시오 (소수의 클래식 RISC에서 수행됨). 그리고 나서 사용자 공간이 균질 비트/실행 형식이 아닌 경우에는 어떻게해야합니까? 그렇기 때문에 getconf LONG_BIT은 컴파일 방법에 따라 다르므로 똑같이 사용하기에 충분하지 않습니다.

$ /rt64/usr/bin/getconf LONG_BIT 
64 
$ /usr/bin/getconf LONG_BIT 
32 
$ file /usr/bin/getconf /rt64/usr/bin/getconf 
/usr/bin/getconf:  ELF 32-bit MSB executable, SPARC32PLUS, V8+ Required, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped 
/rt64/usr/bin/getconf: ELF 64-bit MSB executable, SPARC V9, relaxed memory ordering, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.4, not stripped 
$ uname -m 
sparc64 
0

당신이 찾고있는 의존, 나는 기계가 64 비트 PROC에서 32 비트에 설치되어, 위의 모든 내 사건

에 32 비트를 반환하지만 것 나는 lshw에 하드웨어를 보면 우분투 (lshw -c cpu)는 CPU에 대한 설명이 64 비트 CPU임을 보여 주므로 64 비트 버전의 우분투를 설치할 수 있습니다.

/proc/cpuinfo는 긴 모드를위한 lm 플래그와 같은 하드웨어에 대한 정보의 좋은 소스이기도합니다.

좋은 하루 보내십시오. 잭.

관련 문제