lsof,全称为:list open files。是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接 和硬件。所以如传输控制协议 (TCP) 和用户数据报协议 (UDP) 套接字等,系统在后台都为该应用程序分配了一个文件描述符,无论这个文件的本质如何,该文件描述符为应用程序与基础操作系统之间的交互提供了通用接口。因 为应用程序打开文件的描述符列表提供了大量关于这个应用程序本身的信息,因此通过lsof工具能够查看这个列表对系统监测以及排错将是很有帮助的。
lsof命令的常用参数列表:

lsof filename 显示打开指定文件的所有进程

lsof -a 表示两个参数都必须满足时才显示结果

lsof -c string 显示COMMAND列中包含指定字符的进程所有打开的文件

lsof -u username 显示所属user进程打开的文件

lsof -g gid 显示归属gid的进程情况

lsof +d /DIR/ 显示目录下被进程打开的文件

lsof +D /DIR/ 同上,但是会搜索目录下的所有目录,时间相对较长

lsof -d FD 显示指定文件描述符的进程

lsof -n 不将IP转换为hostname,缺省是不加上-n参数

lsof -i 用以显示符合条件的进程情况

lsof -i[46] [protocol][@hostname|hostaddr][:service|port]

46 –> IPv4 or IPv6

protocol –> TCP or UDP

hostname –> Internet host name

hostaddr –> IPv4地址

service –> /etc/service中的 service name (可以不只一个)

port –> 端口号 (可以不只一个)

应用举例:

如果你在卸载一个分区的时候,会出现以下信息内容:

# umount /media/usbdisk/

umount: /media/usbdisk: device is busy

可以使用lsof命令可以找出是哪个程序正在使用这哪些文件:

# lsof /media/usbdisk/

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

bash 6925 root cwd DIR 8,17 4096 1 /media/usbdisk/

xmms 6979 root cwd DIR 8,17 4096 1 /media/usbdisk/

为了获取更多的信息可以直接使用设备名来代替挂载点:

# lsof /dev/sdb1

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

bash 6925 root cwd DIR 8,17 4096 1 /media/usbdisk

xmms 6979 root cwd DIR 8,17 4096 1 /media/usbdisk

xmms 6979 root 8r REG 8,17 2713101 377 /media/usbdisk/a.mp3

lsof很强大的,更多方法,请找“男人”!