Que tipos de arquivos podem ter uma dependência de biblioteca compartilhada?

2

Estou tentando encontrar uma maneira de permitir que o comando find localize apenas arquivos, que poderiam ter uma dependência de biblioteca compartilhada (o que significa que produzem saída quando chamados com ldd ).

Para encontrar todas as dependências de um grupo de arquivos (binários, texto, escritório, etc.), eu passo por eles com find . -type f e chamo ldd em todos eles, depois analiso a saída.

Eu sei que find tem a opção -executable test, mas não tenho certeza se isso abrange todas as minhas bases.

Eu sei que ldd fornece uma saída semelhante a "O Programa não está vinculado dinamicamente", mas eu gostaria de salvar o comando, para arquivos que não podem ter bibliotecas compartilhadas.

    
por Minix 24.10.2014 / 12:04

1 resposta

1

ldd despeja as dependências dos arquivos Elf. Todos os arquivos Elf começam com os bytes \x7F 'E' 'L' 'F' , que é provavelmente a maneira mais rápida de testá-los. No entanto, não tenho conhecimento de nenhuma opção em find que leia o conteúdo do arquivo. find principalmente apenas observa os metadados na listagem de diretórios, como nome de arquivo, bits de modo e assim por diante.

No entanto, para executar um arquivo Elf, ele deve ter seu bit Execute. Se você tem um arquivo Elf sem nenhum bit de execução, ele não pode ser executado, então você provavelmente não se importa com isso. Então, se você está procurando uma maneira rápida de acelerar sua pesquisa, verificar os bits de execução deve ser seguro.

Eu recomendo -perm /555 em vez de -executeable , porque o primeiro verifica qualquer bit de execução e o segundo verifica se o usuário atual pode executá-lo.

Mas, além de linguagens dinâmicas como o Python, como jofel mencionou, muitos programas em C irão linkar dinamicamente as bibliotecas PAM ( /lib/security/pam_*.so ) e as bibliotecas libc "nss" ( /lib/libnss*.so ). Se você está construindo um chroot ou algo assim, você precisa disso.

    
por 29.10.2014 / 10:35