Unix 调试的瑞士军刀:lsof[转]
12 Jan 2014
|
Lsof 是遵从Unix 哲学的典范,它只做一件事情,并且做的相当完美——它可以列出某个进程打开的所有文件信息。打开的文件可能是普通的文件,目录,NFS文件,块文件,字符文件,共享库,常规管道,明明管道,符号链接,Socket流,网络Socket,UNIX域Socket,以及其它更多。因为Unix系统中几乎所有东西都是文件,你可以想象lsof该有多有用。
如何使用lsof?
这篇文章中我会尽力列举我能想到的所有lsof的用法,让我们先从最简单的开始(或许你已经知道了),然后逐渐增加复杂度:
●列出所有打开的文件 不带任何参数运行lsof会列出所有进程打开的所有文件。
lsof
●找出谁在使用某个文件
lsof /path/to/file
●列出某个用户打开的所有文件
lsof -u pkrumins
●查找某个程序打开的所有文件 -c选项限定只列出以apache开头的进程打开的文件:
lsof -c apache
●列出所有由某个PID对应的进程打开的文件 -p选项让你可以使用进程id来过滤输出。
lsof -p 1
●列出所有网络连接 lsof的-i选项可以列出所有打开了网络套接字(TCP和UDP)的进程。
lsof -i
●列出所有TCP网络连接 也可以为-i选项加上参数,比如tcp,tcp选项会强制lsof只列出打开TCP sockets的进程。
lsof -i tcp
●找到使用某个端口的进程
lsof -i :25
●找到某个用户的所有网络连接 使用-a将-u和-i选项组合可以让lsof列出某个用户的所有网络行为。
lsof -a -u hacker -i
●列出所有NFS(网络文件系统)文件 这个参数很好记,-N就对应NFS。
lsof -N
●列出所有UNIX域Socket文件 这个选项也很好记,-U就对应UNIX。
lsof -U
●列出所有对应某个组id的进程
lsof -g 1234
●列出所有与某个描述符关联的文件
lsof -d 2