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 显示版本信息
你能够通过文件名作为参数来列出打开一个具体文件的进程,lsof后直接指定文件路径即可。
使用+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
添加-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
[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
----
# kill -9 `lsof -t -u app`
默认情况下,使用的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
使用-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)
通过具体的进程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)
通过使用-i伴随:port来显进程信息。
lsof -i :25
COMMAND PIDUSER FD TYPE DEVICE SIZE/OFF NODE NAME
java 2038 app 44u IPv6 16762 0t0 TCP *:8010 (LISTEN)
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)
-N参数表示网络文件系统,下面这个命令列出了指定用户的NFS文件。
[app@hadoop-master etc]$ # lsof -N -u app -a
以上标示为红色的特性可能会被常用到。
原文:http://blog.csdn.net/john_f_lau/article/details/20001991