lsof(list open files)是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。
lsof +d /usr/local 显示当前目录下被进程打开的文件
lsof +D /usr/local 显示当前目录下被进程打开的文件,包括其他目录下的文件
lsof file 显示开启file的进程
lsof -c abc 显示abc进程打开的文件
lsof -p 123 显示pid为123的进程所打开的文件
lsof -g gid 显示归属gid的进程情况
lsof -u root 显示用户root的进程所打开的文件
lsof -u ^root 显示不是用户root的进程所打开的文件
lsof -u 1000 显示uid为1000的用户的进程所打开的文件
lsof -i 显示所有打开的端口
lsof -i:80 显示所有打开80端口的进程
lsof -i udp@192.168.129.126:5060 显示哪些进程使用udp打开了192.168.129.126的5060端口
lsof -i tcp@192.168.129.126:ftp -r 显示哪些进程使用tcp打开了192.168.129.126的ftp服务,-r不断查看
http://blog.csdn.net/guoguo1980/article/details/2324454
lsof - 根据 fd 或 socket 查找打开的文件或读写地址
通过日志发现某个进程一直阻塞在某处,通过 strace 查看系统调用:
$ strace -p 9441
Process 9441 attached
recvfrom(22,
- 1
- 2
- 3
发现阻塞在读 22 socket 上,由于进程连接的地址非常多,想通过目前的信息找到进程是阻塞在哪类连接的读取上:
$ lsof -p 9441 | grep 22u
python 9441 userxxx 22u IPv4 1546555902 0t0 TCP HOST_NAME:59973->IP:40014 (ESTABLISHED)