Os arquivos do bash podem ter linguagem de máquina?

6

Eu estava instalando o Anaconda Python no Linux. Para o Linux, o Anaconda fornece um script bash, mas o arquivo é enorme, quase 300 MB. Eu decidi ver o porquê e abri em um editor de texto.

Cerca de 95% do arquivo é um jargão em linguagem de máquina, assim:

ºîØôЕzÒA¶©h¶¥R•„&´ìÒUÓçß3{^eÑòà(|ÄÃk뎆ºîØôЕzÒA¶©h¶¥R•„&´ìÒUÓçß3{™½ö|q ŽÖm¶¥¡ôÚ­gú¡@óìÛkkº£C»Iš)à÷¾Û¸êw½æõîJN7í×p€A¡ÈzÞÝï8

O arquivo não está corrompido, pois eu posso instalar o Python.

A maior parte disso está no arquivo de licença, então estou querendo saber se é unicode para outro idioma, mas isso não levaria 95% do arquivo, seria?

Pode ser compilado linguagem de código / máquina? É permitido colocar código de máquina nos arquivos do bash?

    
por Shantnu Tiwari 26.09.2015 / 11:31

1 resposta

9

Para expandir o comentário de @ Graeme.

O script baixado é um script bash com um tarball incorporado. A parte do script primeiro valida o tarball por md5sum, depois descompacta o tar, que contém múltiplos .tar.bz2 archives. Em seguida, ele continuará usando uma função personalizada extract_dist() para descompactar os arquivos. Ou seja:

extract_dist python-2.7.10-0
extract_dist conda-3.14.1-py27_0
...

que extrai os arquivos:

python-2.7.10-0.tar.bz2
conda-3.14.1-py27_0.tar.bz2
...

Para a versão de 32 bits, a parte script pode ser extraída por:

head -n 467 Anaconda-2.3.0-Linux-x86.sh

Para a versão de 64 bits, a parte script pode ser extraída por:

head -n 466 Anaconda-2.3.0-Linux-x86_64.sh

Como você pode ver, a parte do script termina com exit 0 , o que anula qualquer processamento adicional do script por bash.

O tarball é extraído por:

tail -n +469 $THIS_PATH | tar xf - --no-same-owner
tail -n +468 $THIS_PATH | tar xf - --no-same-owner

para 32 bits e 64 bits, respectivamente.

Você poderia, por exemplo, fazer:

tail -n +469 Anaconda-2.3.0-Linux-x86.sh | tar -t

para listar os arquivos no arquivo de 32 bits.

    
por 26.09.2015 / 13:05