GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menampilkan semua pustaka bersama yang digunakan oleh executable di Linux?

  1. Gunakan ldd untuk membuat daftar pustaka bersama untuk setiap yang dapat dieksekusi.
  2. Bersihkan keluaran
  3. Sortir, hitung jumlah, urutkan berdasarkan jumlah

Untuk menemukan jawaban atas semua executable di direktori "/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

Ubah "/bin" di atas menjadi "/" untuk mencari semua direktori.

Keluaran (hanya untuk direktori /bin) akan terlihat seperti ini:

  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

Sunting - Menghapus "grep -P"


untuk mempelajari perpustakaan apa yang digunakan biner, gunakan ldd

ldd path/to/the/tool

Anda harus menulis skrip shell kecil untuk mengetahui perincian sistem Anda.


Saya tidak memiliki ldd di rantai alat ARM saya, jadi saya menggunakan objdump:

$(CROSS_COMPILE)objdump -p

Misalnya:

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

Di Linux saya menggunakan:

lsof -P -T -p Application_PID

Ini berfungsi lebih baik daripada ldd ketika executable menggunakan loader non default


Linux
  1. Pengantar Pustaka Bersama Linux (Cara Membuat Pustaka Bersama)

  2. Bagaimana cara mendaftar semua pengguna dalam grup Linux?

  3. Cara mengatur googleTest sebagai perpustakaan bersama di Linux

  1. Bagaimana menangani perpustakaan dinamis dan statis di Linux

  2. Cara Membuat Direktori Bersama untuk Semua Pengguna di Linux

  3. Cara Menemukan Semua Pengguna Sudo Di Linux

  1. Cara Mendaftar Semua Paket yang Terinstal Di Linux

  2. Cara menginisialisasi perpustakaan bersama di Linux

  3. Mengupas perpustakaan bersama linux