您的位置:首页 > 其它

lsof 命令详解

2014-02-26 21:33 211 查看

1 介绍

     lsof(list open files)代表列出一些列打开的文件。在Unix系统中,每一个东西都是一个文件(管道,套接字,目录,设备等)。这样的话,你可以通过lsof命名列出所有打开的文件。

默认情况下,lsof仅仅列出一些列属于激活进程的大文件。

[app@hadoop-master ~]$ lsof
COMMAND   PID      USER   FD     TYPE DEVICE SIZE/OFF    NODE NAME
init        1      root  cwd  unknown                         /proc/1/cwd(readlink: Permission denied)
init        1      root  rtd  unknown                         /proc/1/root(readlink: Permission denied)
init        1      root  txt  unknown                         /proc/1/exe(readlink: Permission denied)
init        1      root NOFD                                   /proc/1/fd(opendir: Permission denied)
kthreadd    2      root  cwd  unknown                        /proc/2/cwd (readlink: Permission denied)


   …

   参数列表,具体的介绍如下:

-a 列出打开文件存在的进程

-c<进程名> 列出指定进程所打开的文件

-g  列出GID号进程详情

-d<文件号> 列出占用该文件号的进程

+d<目录>  列出目录下被打开的文件

+D<目录>  递归列出目录下被打开的文件

-n<目录>  列出使用NFS的文件

-i<条件>  列出符合条件的进程。(4、6、协议、:端口、 @ip )

-p<进程号> 列出指定进程号所打开的文件

-u  列出UID号进程详情

-h 显示帮助信息

-v 显示版本信息

 

2 列出那些打开一个具体文件的进程

    你能够通过文件名作为参数来列出打开一个具体文件的进程,lsof后直接指定文件路径即可。

3列出一个目录下的进程

    使用+D迭代列出一个目录下的所有进程,+d说明是非迭代的,即今指定的那个目录。

[app@hadoop-masteretc]$ lsof +D /var/log
lsof: WARNING:can't opendir(/var/log/ppp): Permission denied
lsof: WARNING:can't opendir(/var/log/samba): Permission denied
lsof: WARNING:can't opendir(/var/log/httpd): Permission denied
lsof: WARNING:can't opendir(/var/log/gdm): Permission denied
lsof: WARNING:can't opendir(/var/log/audit): Permission denied


4以进程名称为开始字符的进程

   添加-c参数,后面链接对于德进程的起始名字,可以列出多个-c参数。

[app@hadoop-masteretc]$ lsof -c ssh -c init
COMMAND  PID USER  FD      TYPE DEVICE SIZE/OFF NODENAME
init       1 root cwd   unknown                      /proc/1/cwd (readlink:Permission denied)
init       1 root rtd   unknown                      /proc/1/root (readlink:Permission denied)
init       1 root txt   unknown                      /proc/1/exe (readlink:Permission denied)
init       1 root NOFD                                /proc/1/fd(opendir: Permission denied)
sshd    1816 root cwd   unknown                      /proc/1816/cwd (readlink:Permission denied)
sshd    1816 root rtd   unknown                      /proc/1816/root(readlink: Permission denied)
sshd    1816 root txt   unknown                      /proc/1816/exe (readlink:Permission denied)
sshd    1816 root NOFD                                /proc/1816/fd(opendir: Permission denied)
sshd    2349 root cwd   unknown                      /proc/2349/cwd (readlink:Permission denied)
sshd    2349 root rtd   unknown                      /proc/2349/root(readlink: Permission denied)
sshd    2349 root txt   unknown                      /proc/2349/exe (readlink:Permission denied)
sshd    2349 root NOFD                                /proc/2349/fd (opendir: Permissiondenied)
sshd    2353 app  cwd   unknown                      /proc/2353/cwd (readlink:Permission denied)
sshd    2353 app  rtd   unknown                      /proc/2353/root(readlink: Permission denied)
sshd    2353 app  txt   unknown                      /proc/2353/exe (readlink:Permission denied)
sshd    2353 app NOFD                               /proc/2353/fd (opendir: Permission denied


5指定具体的某个用户的进程

[app@hadoop-masteretc]$ lsof -u app
COMMAND  PID USER  FD      TYPE DEVICE SIZE/OFF    NODE NAME
java    2038 app  cwd       DIR   8,2     4096  919937 /home/app
java    2038 app  rtd       DIR   8,2     4096       2 /
java    2038 app  txt       REG   8,2    55482  920423 /usr/lib/jvm/jdk1.6.0_43/bin/java
java    2038 app  mem       REG   8,2    50607  920620/usr/lib/jvm/jdk1.6.0_43/jre/lib/amd64/jli/libjli.so
java    2038 app  mem       REG   8,2   156928  134401 /lib64/ld-2.12.so
----


6 kill属于某个用户的进程

# kill -9 `lsof -t -u app`

7 结合使用OR/AND选择

    默认情况下,使用的OR连接。比如,下列将列出属于用户app或者以init为前缀的进程。

lsof -u app -c init
lsof    2818 app    4r     FIFO   0,8      0t0   23457 pipe
lsof    2818  app   7w     FIFO    0,8     0t0   23458 pipe




如果想用AND链接,添加-a参数即可。

lsof -u app -cinit –a


8 列出所有的网络链接

    使用-i参数,列出所有的网络链接信息。

[app@hadoop-master etc]$ lsof -i
COMMAND  PIDUSER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    2038  app  36u  IPv6  16238     0t0  TCP *:tproxy (LISTEN)
java    2038  app  44u  IPv6  16762     0t0  TCP *:8010 (LISTEN)
java    2038  app  45u  IPv6  16776     0t0  TCP localhost:mxi (LISTEN)


9 通过具体进程列出正在使用的网路文件

    通过具体的进程ID来显示正在使用的进程信息。

[app@hadoop-master etc]$ lsof -i -a -p 2038
COMMAND  PIDUSER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    2038  app  36u  IPv6  16238     0t0  TCP *:tproxy (LISTEN)
java    2038  app  44u  IPv6  16762     0t0  TCP *:8010 (LISTEN)
java    2038  app  45u  IPv6  16776     0t0  TCP localhost:mxi (LISTEN)


10监听具体端口的进程

    通过使用-i伴随:port来显进程信息。

lsof -i :25
COMMAND  PIDUSER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java    2038  app  44u  IPv6  16762     0t0  TCP *:8010 (LISTEN)


11 列出所有TCP和UDP连接

lsof -i tcp; lsof -i udp;
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
java   2038  app   36u IPv6  16238      0t0 TCP *:tproxy (LISTEN)
java   2038  app   44u IPv6  16762      0t0 TCP *:8010 (LISTEN)
java   2038  app   45u IPv6  16776      0t0 TCP localhost:mxi (LISTEN)


12 列出所有的网络文件系统的文件(NFS)

     -N参数表示网络文件系统,下面这个命令列出了指定用户的NFS文件。

[app@hadoop-master etc]$ # lsof -N -u app -a


       以上标示为红色的特性可能会被常用到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: