Como ver os objetos compartilhados atualmente carregados no Linux?

34

Eu tenho duas perguntas relacionadas:

  • Como posso ver se uma biblioteca compartilhada está atualmente carregada? (ou seja, em todo o sistema, independente de processo)
  • Como posso ver todas as bibliotecas compartilhadas carregadas por um processo?
Máx.
fonte

Respostas:

40

Você pode fazer as duas coisas com lsof. Para ver quais processos têm uma biblioteca aberta ou mapeada, faça:

lsof /path/to/lib.so

e para ver quais arquivos (incluindo bibliotecas compartilhadas) um processo abriu e / ou mapeado, faça:

lsof -p <pid>
TomH
fonte
22

Outra maneira de ver o que é carregado em um processo é observando o /proc/PID/mapsarquivo. Isso mostra tudo mapeado em seu espaço de endereço, incluindo objetos compartilhados mapeados.

Rich Homolka
fonte
Funcionou bem na minha plataforma ARM incorporada. Embora a implementação do BusyBox lsofnão tenha a funcionalidade necessária.
Alex Che
7
sudo grep libcairo.so /proc/*/maps

é uma ótima maneira de explorar tudo /proc/PID/maps mencionado por Rich de uma vez. Saída de amostra:

/proc/8390/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8390/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9afae000-7f0a9b0bc000 r-xp 00000000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b0bc000-7f0a9b2bc000 ---p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bc000-7f0a9b2bf000 r--p 0010e000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6
/proc/8466/maps:7f0a9b2bf000-7f0a9b2c0000 rw-p 00111000 fc:00 274690                     /usr/lib/x86_64-linux-gnu/libcairo.so.2.11400.6

Além disso awke o bash-fu podem refinar ainda mais a saída.

Este método também mostra as bibliotecas abertas com dlopen, testadas com esta configuração mínima hackeada com uma sleep(1000)no Ubuntu 18.04.

Ciro Santilli adicionou uma nova foto
fonte
4

Você pode executar o próximo comando pela raiz e ver uma lista completa,

cat /proc/*/maps | awk '{print $6;}' | grep '\.so' | sort | uniq

Isso é para usuários que não têm lsof.

Nobutarou
fonte
Por que você deseja que o usuário tente isso? Por favor edite sua resposta para melhor compreensão.
CaldeiraG