Unix 调试的瑞士军刀:lsof[转]

原文地址

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