Como obtenho uma lista de nomes de arquivos de bibliotecas compartilhadas no Linux?

Como obtenho uma lista de nomes de arquivos de bibliotecas compartilhadas no Linux?

Existe um GNU Linux integrado para obter uma lista de nomes de arquivos de bibliotecas compartilhadas? Eu considerei analisar a saída de ldconfig -p. No entanto, não tenho certeza sobre a consistência na saída de sistema para sistema.

Já estou ciente do que poderia usar, findmas como o linker/loader possui um cache de bibliotecas e locais, parece mais eficiente utilizá-lo de alguma forma. Além disso, os caminhos que o vinculador/carregador pesquisa são os únicos que me preocupam - ou seja, bibliotecas que foram processadas por ldconfig.

Responder1

Se você quiser capturar todos eles, não há outra escolha senão fazer travessias completas do sistema de arquivos. ldconfigconhece apenas as bibliotecas nos caminhos padrão e os caminhos extras que está configurado para procurar (geralmente definidos em /etc/ld.so.conf*). Os locais suspeitos habituais onde outras bibliotecas podem ser encontradas são $HOMEe /opt, embora não haja limite, especialmente quando as próprias pessoas constroem aplicativos.

Se você não confia na saída de ldconfig -p, poderá analisar seu cache diretamente. É binário, mas usar stringsremove todo o lixo (5 então /lib/ corresponde):

strings -n5 /etc/ld.so.cache

No meu sistema, ambos dão os mesmos resultados, que verifiquei rapidamente:

a=$(ldconfig -p | awk -F'> ' '{print $2}' | sort); # get them to the same format
b=$(strings -n5 /etc/ld.so.cache | sort -u); 
echo -e "$a\n$b\n$b" | sort | uniq -u

Que verificou se alguma biblioteca da ldconfig -plista não foi mencionada no cache. Nada foi devolvido.

informação relacionada