다음 사항을 교차 확인하는 스크립트를 작성하려고 합니다.
1. 설치 파일의 대상 아키텍처(32 또는 64비트)
2. 시스템 아키텍처.
두 번째 부분은 매우 간단하며 다음과 같은 명령을 사용하여 계산한 다음 lscpu
grep 및 or의 조합을 사용하여 특정 줄을 추출할 수 있습니다. 그러나 첫 번째 부분은 복잡한 것으로 판명되었습니다. file 명령을 사용해 보았지만 출력이 매우 불규칙합니다. 따라서 특정 열을 추출하는 것이 매우 어려워집니다. 나는 또한 전통적으로 이런 종류의 일에 사용되지는 않았지만 사용해 보았습니다. 그러나 예상대로 제한으로 인해 대부분의 파일 형식을 인식할 수 없습니다.awk
sed
objdump
스크립트의 나머지 부분은 매우 간단합니다. 값을 비교하고 의도한 작업을 계속하겠습니다. 위의 1번과 관련하여 도움을 받고 싶습니다.
편집하다:
내 file
명령 문제를 설명하기 위해 몇 가지 예를 추가합니다.
$ file my_package_name.deb my_package_name.deb: Debian binary package (format 2.0)
$ file my_package_name.rpm my_package_name.rpm: RPM v3.0 bin i386/x86_64
위의 예는 설치 파일에 대한 것입니다. 특정 스크립트를 실행하기 위해 실행하면 다음과 같은 결과가 나타납니다.
$ file crclient O/P: crclient: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped
보시다시피, 내가 얻은 출력은 file
명령과 매우 일치하지 않습니다. 따라서 그 조각을 추출하는 것은 매우 복잡해집니다.
답변1
64비트 CPU는 32비트 또는 64비트 운영 체제를 설치할 수 있으며, 64비트 운영 체제를 실행하는 경우 일치하는 호환성 라이브러리를 사용하여 32비트 응용 프로그램을 실행할 수 있습니다. 따라서 CPU만 확인하는 것은 아닙니다.~ 해야 하다정답을 알려드릴 것입니다.
다행히도 이 uname
명령은 여러분이 원하는 많은 것을 제공할 것입니다.
uname -a
Linux parrot 2.6.32-5-amd64 #1 SMP Tue May 13 16:34:35 UTC 2014 x86_64 GNU/Linux
uname -m
x86_64
시스템에 설치된 운영 체제 유형에 대한 명시적인 설명을 표준 libc에서 확인할 수 있다고 생각합니다.
file $(readlink -f /lib/libc.so* ) | grep -q x86-64 && echo x86-64 || echo x86-32
답변2
deb 패키지의 경우 다음 dpkg --print-architecture
의 출력을 비교할 수 있습니다.dpkg-deb --info packagename.deb | awk '/Architecture:/ {print $2}'
스크립트에는 if [$SYSARCH -eq $PACKAGEARCH]
sysarch와 같은 if 문이 시스템 아키텍처이고 packagarch가 패키지 아키텍처입니다.