
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, find
mas 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. ldconfig
conhece 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 $HOME
e /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 strings
remove 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 -p
lista não foi mencionada no cache. Nada foi devolvido.