目录

Linux命令之lsof

lsoflist open files命令能够列出所有进程打开的文件,Linux下一切皆文件,此命令在分析文件描述符(包括网络套接字)的使用情况时格外有用。

lsof命令默认输出全部信息,通过命令选项进行过滤,这里列出一些常用的场景。

查看网络信息

1
2
3
4
5
6
lsof -i [46][protocol][@hostname|hostaddr][:service|port]

4或6是IP版本,分别表示IPv4和IPv6;
protocol可以是TCP或UDP;
hosname是主机名,hostaddr是IP地址;
service是服务名,port是一个端口或端口范围。

-s和-i选项可以配合使用,查询指定状态的套接字。

1
2
3
lsof -i<protocol>[@hostname|hostaddr][:service|port] -s<protocol>:<state>

这里-i和-s需要指定相同的protocol

例如,lsof -iTCP -sTCP:LISTEN查询所有LISTEN状态的TCP套接字。

lsof -i :port 是我最常用的命令之一

根据进程查询

1
2
3
lsof -p PID   # 根据进程ID查询
lsof -c PNAME # 跟进进程名称查询
lsof -t -c PNAME # 返回进程ID

根据用户查询

1
lsof -u [^]USERNAME1,[^]USERNAME2,...

查询目标用户的资源使用情况; 用户名前带"^“符号,则查询结果不包含目标用户。

根据文件/目录查询

1
2
lsof filepath  # 根据文件路径查询,支持通配符
lsof +D dirpath  # 查询目录下的所有文件