GNU/Linux >> Linux Esercitazione >  >> Linux

Come mostrare tutte le librerie condivise utilizzate dagli eseguibili in Linux?

  1. Usa ldd per elencare le librerie condivise per ogni eseguibile.
  2. Ripulisci l'output
  3. Ordina, calcola conteggi, ordina per conteggio

Per trovare la risposta per tutti gli eseguibili nella directory "/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

Cambia "/bin" sopra in "/" per cercare in tutte le directory.

L'output (solo per la directory /bin) sarà simile a questo:

  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

Modifica - Rimosso "grep -P"


per sapere quali librerie usa un binario, usa ldd

ldd path/to/the/tool

Dovresti scrivere un piccolo script di shell per arrivare alla suddivisione dell'intero sistema.


Non avevo ldd sulla mia toolchain ARM quindi ho usato objdump:

$(CROSS_COMPILE)objdump -p

Ad esempio:

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

Su Linux uso:

lsof -P -T -p Application_PID

Funziona meglio di ldd quando l'eseguibile utilizza un caricatore non predefinito


Linux
  1. Come gestire le librerie dinamiche e statiche in Linux

  2. Come creare una directory condivisa per tutti gli utenti in Linux

  3. Introduzione alle librerie condivise Linux (come creare librerie condivise)

  4. Rimozione delle librerie condivise di Linux

  5. Come eseguire il controllo delle versioni di una libreria condivisa in Linux?

Come elencare le librerie condivise utilizzate dagli eseguibili in Linux

Come trovare tutti i caratteri installati in Linux

Come mostrare file nascosti su Linux

Come elencare tutti gli utenti di un gruppo in Linux

Come elencare tutti i gruppi in Linux?

Come elencare tutti i file ordinati per dimensione in Linux?