Linux查看程序、进程的依赖库的方法

作者:zhanhailiang 日期:2015-02-01

原文:How to check what libraries are used by a program or process on Linux

1. 利用ldd查看可执行程序的依赖库

[[email protected]~]# ldd /usr/local/php/bin/php
    linux-vdso.so.1 =>  (0x00007fff753f5000)
    libcrypt.so.1 => /lib64/libcrypt.so.1 (0x00000031f4600000)
    librt.so.1 => /lib64/librt.so.1 (0x000000311ee00000)
    libmysqlclient.so.18 => /usr/local/mysql/lib/libmysqlclient.so.18 (0x00007f767b422000)
    libmcrypt.so.4 => /usr/lib64/libmcrypt.so.4 (0x00007f767b1ef000)
    libiconv.so.2 => /usr/local/lib/libiconv.so.2 (0x00007f767af0a000)
    libcurl.so.4 => /usr/lib64/libcurl.so.4 (0x0000003519800000)
    libm.so.6 => /lib64/libm.so.6 (0x00000031f2200000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00000031f1600000)
    libnsl.so.1 => /lib64/libnsl.so.1 (0x00000031f3a00000)
    libxml2.so.2 => /usr/lib64/libxml2.so.2 (0x00000031f8a00000)
    libz.so.1 => /usr/local/lib/libz.so.1 (0x00007f767acf2000)
    libssl.so.10 => /usr/lib64/libssl.so.10 (0x000000311c600000)
    libcrypto.so.10 => /usr/lib64/libcrypto.so.10 (0x00000031f7600000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x000000311ce00000)
    libc.so.6 => /lib64/libc.so.6 (0x00000031f0e00000)
    libresolv.so.2 => /lib64/libresolv.so.2 (0x00000031f3200000)
    libfreebl3.so => /lib64/libfreebl3.so (0x00000031f4e00000)
    /lib64/ld-linux-x86-64.so.2 (0x00000031f0a00000)
    libidn.so.11 => /lib64/libidn.so.11 (0x00000031f7e00000)
    libldap-2.4.so.2 => /lib64/libldap-2.4.so.2 (0x000000351c000000)
    libgssapi_krb5.so.2 => /lib64/libgssapi_krb5.so.2 (0x000000311f200000)
    libkrb5.so.3 => /lib64/libkrb5.so.3 (0x000000311e200000)
    libk5crypto.so.3 => /lib64/libk5crypto.so.3 (0x00000031f7200000)
    libcom_err.so.2 => /lib64/libcom_err.so.2 (0x000000311e600000)
    libssl3.so => /usr/lib64/libssl3.so (0x000000351b800000)
    libsmime3.so => /usr/lib64/libsmime3.so (0x000000351bc00000)
    libnss3.so => /usr/lib64/libnss3.so (0x000000351a800000)
    libnssutil3.so => /usr/lib64/libnssutil3.so (0x000000351a400000)
    libplds4.so => /lib64/libplds4.so (0x000000351ac00000)
    libplc4.so => /lib64/libplc4.so (0x000000351b400000)
    libnspr4.so => /lib64/libnspr4.so (0x000000351b000000)
    libssh2.so.1 => /usr/lib64/libssh2.so.1 (0x0000003519c00000)
    liblber-2.4.so.2 => /lib64/liblber-2.4.so.2 (0x000000351a000000)
    libsasl2.so.2 => /usr/lib64/libsasl2.so.2 (0x00000031f8200000)
    libkrb5support.so.0 => /lib64/libkrb5support.so.0 (0x00000031f7a00000)
    libkeyutils.so.1 => /lib64/libkeyutils.so.1 (0x00000031f6e00000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00000031f2600000)

注:ldd通过调用动态链接器来获取可执行程序的依赖库,但是并不推荐在未知的可执行程序上执行业ldd来获取其依赖库,因为部分版本的ldd会直接通过调用该可执行程序来获取其依赖库,这存在安全风险。

2. 利用pmap工具查询未知的可执行程序的依赖库

[[email protected]~]# objdump -p /usr/local/php/bin/php |grep NEEDED
  NEEDED               libcrypt.so.1
  NEEDED               librt.so.1
  NEEDED               libmysqlclient.so.18
  NEEDED               libmcrypt.so.4
  NEEDED               libiconv.so.2
  NEEDED               libcurl.so.4
  NEEDED               libm.so.6
  NEEDED               libdl.so.2
  NEEDED               libnsl.so.1
  NEEDED               libxml2.so.2
  NEEDED               libz.so.1
  NEEDED               libssl.so.10
  NEEDED               libcrypto.so.10
  NEEDED               libpthread.so.0
  NEEDED               libc.so.6
  NEEDED               libresolv.so.2

3. 利用pmap查看正在运行时的进程的依赖库

利用pldd工具既可以获取进程的内存映射信息,也可以获取进程的依赖共享库信息:

[[email protected]~/software/pldd]# ps -ef|grep php-fpm
root     26534     1  0  2014 ?        00:01:34 php-fpm: master process (/usr/local/php-5.3.29/etc/php-fpm.conf)
nobody   26535 26534  0  2014 ?        00:00:04 php-fpm: pool www
nobody   26536 26534  0  2014 ?        00:00:05 php-fpm: pool www
root     30510 30324  0 00:39 pts/0    00:00:00 grep php-fpm
[[email protected]~/software/pldd]# pmap 26534 |head
26534:   php-fpm: master process (/usr/local/php-5.3.29/etc/php-fpm.conf)
0000000000400000  10452K r-x--  /usr/local/php-5.3.29/sbin/php-fpm
0000000001035000     76K rw---  /usr/local/php-5.3.29/sbin/php-fpm
0000000001048000    104K rw---    [ anon ]
0000000002a65000   3448K rw---    [ anon ]
000000311c600000    388K r-x--  /usr/lib64/libssl.so.1.0.1e
000000311c661000   2048K -----  /usr/lib64/libssl.so.1.0.1e
000000311c861000     16K r----  /usr/lib64/libssl.so.1.0.1e
000000311c865000     28K rw---  /usr/lib64/libssl.so.1.0.1e
000000311ce00000     92K r-x--  /lib64/libpthread-2.12.so

注:本文依赖库指的是shared library dependencies。

时间: 2024-08-02 06:58:18

Linux查看程序、进程的依赖库的方法的相关文章

Linux查看程序端口占用情况【转】

今天发现服务器上Tomcat 8080端口起不来,老提示端口已经被占用. 使用命令: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是PID/Program name 发现8080端口被PID为9658的Java进程占用. 进一步使用命令:ps -aux | grep java,或者直接:ps -aux | grep pid 查看 就可以明确知道8080端口

linux查看和修改PATH环境变量的方法

linux查看和修改PATH环境变量的方法 查看PATH:echo $PATH以添加mongodb server为列修改方法一:export PATH=/usr/local/mongodb/bin:$PATH//配置完后可以通过echo $PATH查看配置结果.生效方法:立即生效有效期限:临时改变,只能在当前的终端窗口中有效,当前窗口关闭后就会恢复原有的path配置用户局限:仅对当前用户 修改方法二:通过修改.bashrc文件:vim ~/.bashrc //在最后一行添上:export PAT

windows程序查看可以行文件依赖库

通常在做windows下开发程序,发布的时候需要同时打包一些依赖库:我们可以通过工具直接查看需要发布的程序依赖的程序,这样可以方便快捷的打包程序 这里我们推荐使用:dependencywalker 下载地址:http://www.dependencywalker.com/ 界面如下:

linux查看某个进程的线程id(spid)

鉴于linux下线程的广泛使用 我们怎么查看某个进程拥有的线程id了 现在很多服务的设计 主进程->子进程->线程(比如mysql,varnish) 主进程负责侦听网络上的连接 并把连接发送给子进程 子进程派生线程去处理这些线程 mysql(父进程460,子进程863) 1 460 425 333 ? -1 S 0 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/storage/mysql/backup --pid-file=/

linux 查看某进程或程序的网卡流量(转)

一.nethogs介绍 分享一个linux 下检测系统进程占用带宽情况的检查.来自github上的开源工具. 它不依赖内核中的模块.当我们的服务器网络异常时,可以通过运行nethogs程序来检测是那个程序占用了大量带宽.节省了查找时间. 二.安装方法 1.在epel 源中可以直接yum 安装 yum install libpcap nethogs -y 2.源码方式安装 2.1 安装c++ 环境 [[email protected] ~]# yum install gcc-c++ libpcap

linux查看某个进程CPU消耗较高的具体线程或程序的方法

目前我们的监控,可以发现消耗较高CPU的进程(阀值为3个CPU),通过监控我们可以找到消耗较高CPU的进程号: 通过进程号pid,我们在linux上可以通过top –H –p <pid>命令,显示该进程中每个线程的CPU资源消耗情况. 然后通过threadump命令,可以打印出某个应用JVM中某时刻所有线程的调用情况,通过线程号我们就可以对应找到线程调用的程序了. 另: 使用jrcmd命令也可以进行threadump和进程执行线程情况的查看,但该命令为jrockit 5.0 新带的命令,在wl

linux 查看运行进程所在目录

通过ps及top命令查看进程信息时,只能查到相对路径,查不到的进程的详细信息,如绝对路径等.这时,我们需要通过以下的方法来查看进程的详细信息: Linux在启动一个进程时,系统会在/proc下创建一个以PID命名的文件夹,在该文件夹下会有我们的进程的信息,其中包括一个名为exe的文件即记录了绝对路径,通过ll或ls –l命令即可查看. ll /proc/PID cwd符号链接的是进程运行目录: exe符号连接就是执行程序的绝对路径: cmdline就是程序运行时输入的命令行命令: environ

Linux查看程序端口占用情况

今天发现服务器上Tomcat 8080端口起不来,老提示端口已经被占用. 使用命令: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是PID/Program name clip_image002 发现8080端口被PID为9658的Java进程占用. 进一步使用命令:ps -aux | grep java,或者直接:ps -aux | grep pid 查看

转载:Linux查看程序端口占用情况

http://www.cnblogs.com/benio/archive/2010/09/15/1826728.html 今天发现服务器上Tomcat 8080端口起不来,老提示端口已经被占用. 使用命令: ps -aux | grep tomcat 发现并没有8080端口的Tomcat进程. 使用命令:netstat –apn 查看所有的进程和端口使用情况.发现下面的进程列表,其中最后一栏是PID/Program name 发现8080端口被PID为9658的Java进程占用. 进一步使用命令