GNU/Linux >> Tutoriels Linux >  >> Linux

Comment afficher toutes les bibliothèques partagées utilisées par les exécutables sous Linux ?

  1. Utilisez ldd pour répertorier les bibliothèques partagées pour chaque exécutable.
  2. Nettoyer la sortie
  3. Trier, calculer les comptes, trier par compte

Pour trouver la réponse pour tous les exécutables du répertoire "/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

Remplacez "/bin" ci-dessus par "/" pour rechercher tous les répertoires.

La sortie (uniquement pour le répertoire /bin) ressemblera à ceci :

  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

Édition - Suppression de "grep -P"


pour savoir quelles bibliothèques un binaire utilise, utilisez ldd

ldd path/to/the/tool

Vous devrez écrire un petit script shell pour accéder à votre ventilation à l'échelle du système.


Je n'avais pas de ldd sur ma chaîne d'outils ARM, j'ai donc utilisé objdump :

$(CROSS_COMPILE)objdump -p

Par exemple :

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

Sous Linux j'utilise :

lsof -P -T -p Application_PID

Cela fonctionne mieux que ldd lorsque l'exécutable utilise un chargeur non par défaut


Linux
  1. Comment gérer les bibliothèques dynamiques et statiques sous Linux

  2. Comment créer un répertoire partagé pour tous les utilisateurs sous Linux

  3. Suppression des bibliothèques partagées Linux

  4. Comment faire le versioning d'une bibliothèque partagée sous Linux ?

  5. Comment configurer googleTest en tant que bibliothèque partagée sous Linux

Comment répertorier les bibliothèques partagées utilisées par les exécutables sous Linux

Comment trouver toutes les polices installées sous Linux

Comment afficher les fichiers cachés sous Linux

Comment lister tous les utilisateurs d'un groupe sous Linux

Comment lister tous les groupes sous Linux ?

Comment lister tous les fichiers classés par taille sous Linux ?