Search code examples
linuxshared-libraries

How to show all shared libraries used by executables in Linux?


I'd like to know which libraries are used by executables on my system. More specifically, I'd like to rank which libraries are used the most, along with the binaries that use them. How can I do this?


Solution

    1. Use ldd to list shared libraries for each executable.
    2. Cleanup the output
    3. Sort, compute counts, sort by count

    To find the answer for all executables in the "/bin" directory:

    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
    

    Change "/bin" above to "/" to search all directories.

    Output (for just the /bin directory) will look something like this:

      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
    

    Edit - Removed "grep -P"