Escrevendo um Script para combinar com a arquitetura do sistema e do software

0

Estou tentando escrever um script em que ele cruzará as coisas:

1.A arquitetura para a qual o arquivo de instalação foi planejado (32 ou 64 bits)

2.A arquitetura do sistema.

A segunda parte é bastante fácil e pode ser descoberta usando comandos como lscpu e, em seguida, extraindo essa linha específica usando a combinação de grep e awk ou sed . No entanto, a primeira parte está se mostrando complicada. Eu tentei usar o comando file mas ele tem uma saída muito irregular. Por isso, torna-se muito difícil extrair uma coluna específica a partir dele. Eu também tentei usar objdump , embora tradicionalmente não usado para coisas como esta. No entanto, como esperado, devido a suas limitações, ele não reconhece a maioria dos tipos de arquivo.

A parte restante do script é muito simples, onde eu estaria comparando esses valores e continuando com minhas tarefas pretendidas. Eu gostaria de sua ajuda com o ponto 1 mencionado acima.

EDITAR:

Adicionando alguns exemplos para explicar meu problema com o comando 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

Os exemplos acima foram para arquivos de configuração. Se eu fosse executá-lo para dizer algum script, isso me daria algumas coisas como:

$ 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

Como vocês podem ver, estou obtendo uma saída muito inconsistente com o comando file . Por isso, tentar extrair uma parte disso tornou-se muito complicado.

    
por theHeman 14.04.2015 / 11:48

2 respostas

1

Uma CPU de 64 bits pode ter sistema operacional de 32 ou 64 bits instalado e, se estiver executando um sistema operacional de 64 bits, é possível executar aplicativos de 32 bits com as bibliotecas de compatibilidade correspondentes. Portanto, simplesmente verificar a CPU não é necessariamente que lhe dará a resposta correta.

Felizmente, o comando uname fornecerá muito do que você deseja.

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

Acredito que você pode verificar o libc canônico para uma declaração definitiva do tipo de sistema operacional instalado no sistema:

file $(readlink -f /lib/libc.so* ) | grep -q x86-64 && echo x86-64 || echo x86-32
    
por 14.04.2015 / 13:31
0

No que diz respeito aos pacotes deb, você pode comparar a saída de dpkg --print-architecture e dpkg-deb --info packagename.deb | awk '/Architecture:/ {print $2}'

Em um script que eu teria se declaração como if [$SYSARCH -eq $PACKAGEARCH] onde sysarch é arquitetura de sistema e packagarch é arquitetura de pacote, obviamente

    
por 14.04.2015 / 15:59