lsof(list open file)是一个列出当前系统打开的文件描述符的工具
通过它,我们可以知道感兴趣的进程打开了哪些文件描述符,或者我们感兴趣的文件描述符被哪些进程打开了。
lsof常用选项:
-i # 显示socket文件描述符,该选项的使用方法如下:
lsof -i [46] [protocol] [@hostname|ipaddr][:service|port]
# 其中4表示IPv4协议,6表示IPv6协议:protocol指定传输层协议,可以是TCP或者UDP:hostname指定主机名:ipaddr指定主机的IP地址:service指定服务名:port指定端口号。
比如,要显示所有连接到主机192.168.1.88的ssh服务的socket文件描述符,可以使用下面的命令:
lsof -i@192.168.1.88:22
如果-i选项后不指定任何参数,则lsof命令将显示所有socket文件描述符
lsof -i:port # 可以查看某个端口对应的进程号
-u # 显示指定用户启动的所有进程打开的所有文件描述符
-c # 显示指定的命令打开的所有文件描述符。
lsof -c app # 查看app打开了哪些文件描述符
-p # 显示指定进程打开的所有文件描述符
-t # 仅显示打开了目标文件描述符的进程的PID
每行内容解释:
COMMAND: 执行程序所使用的终端命令(默认仅显示前9个字符)
PID:文件描述符所属进程的PID
USER:用用该进程描述符的用户的用户名
FD:文件描述符的描述。其中cwd表示进程的工作目录,rtd表示用户的根目录,txt表示进程运行的程序代码,mem表示直接映射到内存中的文件,r (可读)w(可写)u(可读可写)
0u、1u、 2u分别表示标准输入、标准输出和标准错误输出; 3u表示处于LISTEN状态的监听socket;4u表示epoll内核事件表对应的文件描述符
TYPE: 文件描述符的类型。其中DIR是目录,REG是普通文件,CHR是字符设备文件,IPv4是IPv4类型的socket文件描述符,0000是未知类型。
DEVICE:文件所属设备。
SIZE/OFF:文件大小或者偏移量,有些文件显示文件大小没有意义,就会显示偏移量,比如字符设备。
NAME:文件的名字