GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo mostrar todas las bibliotecas compartidas utilizadas por los ejecutables en Linux?

  1. Usar ldd para enumerar bibliotecas compartidas para cada ejecutable.
  2. Limpiar la salida
  3. Ordenar, calcular conteos, ordenar por conteo

Para encontrar la respuesta para todos los ejecutables en el directorio "/bin":

find /bin -type f -perm /a+x -exec ldd {} \; \
| grep so \
| sed -e '/^[^\t]/ d' \
| sed -e 's/\t//' \
| sed -e 's/.*=..//' \
| sed -e 's/ (0.*)//' \
| sort \
| uniq -c \
| sort -n

Cambie "/bin" arriba a "/" para buscar en todos los directorios.

La salida (solo para el directorio /bin) se verá así:

  1 /lib64/libexpat.so.0
  1 /lib64/libgcc_s.so.1
  1 /lib64/libnsl.so.1
  1 /lib64/libpcre.so.0
  1 /lib64/libproc-3.2.7.so
  1 /usr/lib64/libbeecrypt.so.6
  1 /usr/lib64/libbz2.so.1
  1 /usr/lib64/libelf.so.1
  1 /usr/lib64/libpopt.so.0
  1 /usr/lib64/librpm-4.4.so
  1 /usr/lib64/librpmdb-4.4.so
  1 /usr/lib64/librpmio-4.4.so
  1 /usr/lib64/libsqlite3.so.0
  1 /usr/lib64/libstdc++.so.6
  1 /usr/lib64/libz.so.1
  2 /lib64/libasound.so.2
  2 /lib64/libblkid.so.1
  2 /lib64/libdevmapper.so.1.02
  2 /lib64/libpam_misc.so.0
  2 /lib64/libpam.so.0
  2 /lib64/libuuid.so.1
  3 /lib64/libaudit.so.0
  3 /lib64/libcrypt.so.1
  3 /lib64/libdbus-1.so.3
  4 /lib64/libresolv.so.2
  4 /lib64/libtermcap.so.2
  5 /lib64/libacl.so.1
  5 /lib64/libattr.so.1
  5 /lib64/libcap.so.1
  6 /lib64/librt.so.1
  7 /lib64/libm.so.6
  9 /lib64/libpthread.so.0
 13 /lib64/libselinux.so.1
 13 /lib64/libsepol.so.1
 22 /lib64/libdl.so.2
 83 /lib64/ld-linux-x86-64.so.2
 83 /lib64/libc.so.6

Editar - Eliminado "grep -P"


para saber qué bibliotecas usa un binario, usa ldd

ldd path/to/the/tool

Tendría que escribir un pequeño script de shell para llegar al desglose de todo el sistema.


No tenía ldd en mi cadena de herramientas ARM, así que usé objdump:

$(CROSS_COMPILE)objdump -p

Por ejemplo:

objdump -p /usr/bin/python:

Dynamic Section:
  NEEDED               libpthread.so.0
  NEEDED               libdl.so.2
  NEEDED               libutil.so.1
  NEEDED               libssl.so.1.0.0
  NEEDED               libcrypto.so.1.0.0
  NEEDED               libz.so.1
  NEEDED               libm.so.6
  NEEDED               libc.so.6
  INIT                 0x0000000000416a98
  FINI                 0x000000000053c058
  GNU_HASH             0x0000000000400298
  STRTAB               0x000000000040c858
  SYMTAB               0x0000000000402aa8
  STRSZ                0x0000000000006cdb
  SYMENT               0x0000000000000018
  DEBUG                0x0000000000000000
  PLTGOT               0x0000000000832fe8
  PLTRELSZ             0x0000000000002688
  PLTREL               0x0000000000000007
  JMPREL               0x0000000000414410
  RELA                 0x0000000000414398
  RELASZ               0x0000000000000078
  RELAENT              0x0000000000000018
  VERNEED              0x0000000000414258
  VERNEEDNUM           0x0000000000000008
  VERSYM               0x0000000000413534

En Linux uso:

lsof -P -T -p Application_PID

Esto funciona mejor que ldd cuando el ejecutable usa un cargador no predeterminado


Linux
  1. Cómo encontrar todos los usuarios de Sudo en Linux

  2. Introducción a las bibliotecas compartidas de Linux (Cómo crear bibliotecas compartidas)

  3. Cómo inicializar una biblioteca compartida en Linux

  4. ¿Cómo enumerar todos los usuarios en un grupo de Linux?

  5. ¿Cómo hacer el control de versiones de una biblioteca compartida en Linux?

Cómo enumerar las bibliotecas compartidas utilizadas por los ejecutables en Linux

Cómo encontrar todas las fuentes instaladas en Linux

Cómo mostrar archivos ocultos en Linux

Cómo enumerar todos los usuarios de un grupo en Linux

¿Cómo enumerar todos los grupos en Linux?

¿Cómo enumerar todos los archivos ordenados por tamaño en Linux?