首页/系统/Linux 运维命令速查/lsof 网络连接视角
进程与作业69 条

lsof 网络连接视角

lsof -i 列出进程与网络连接的对应:-i :8080 查端口、-i @1.2.3.4 查对端、-sTCP:LISTEN 只看监听、-nP 不解析,与 ss 互补。

Linux 运维命令速查系统更新于 2026-10-13

lsof 的网络视角是什么

lsof 本职是「列出打开的文件」,而网络套接字在 Linux 里也是一种文件,所以 lsof -i 能把进程与网络连接对应起来:哪个进程监听着哪个端口、哪个进程连到了哪个对端。它回答的问题比 ss 多一层——ss 告诉你端口被占用,lsof 直接告诉你是哪个进程、以什么身份、命令路径是什么。

基本信息

适用平台Linux/Unix(lsof 包,多数发行版需单独安装)
命令语法lsof -i [条件] / lsof -i :端口 / lsof -i @对端地址
常用选项-n 不解析主机名 -P 不解析端口名 -s 按协议与状态过滤 -a 让多个条件取交集 -u 按用户过滤
默认逻辑多个条件之间是「或」关系,需要「与」时必须显式加 -a
权限说明看别人的进程需要 root;普通用户只能看到自己进程的相关条目

典型使用场景

  • 端口占用定位:启动报 Address already in use 时确认是谁占着
  • 进程审计:确认某个服务的进程实际连到了哪些对端
  • 安全排查:看是否有进程在对外建立可疑连接
  • 按用户过滤:只看 www 或 deploy 用户的网络活动
  • 核对监听范围:确认服务绑的是 0.0.0.0 还是 127.0.0.1

常用示例

常用示例
lsof -i :8080                              # 谁在监听或使用 8080
lsof -i -sTCP:LISTEN -nP | head            # 全部监听,等价于 ss -tlnp
lsof -i @10.0.0.9                          # 与该地址相关的连接
lsof -a -u www-data -i                     # -a 让用户与 -i 取交集
lsof -i tcp:443 -sTCP:ESTABLISHED -nP | head   # 只看已建立的 443 连接
lsof -p 1234 -a -i                         # 指定进程的网络连接

输出关键列读法

列含义怎么看
COMMAND进程名(可能被截断显示)配合 PID 列一起定位
PID进程号用 ps -p 或 /proc/PID 继续深挖
USER进程属主异常用户持有网络连接值得留意
FD文件描述符与模式带 u 表示可读写,是套接字编号
TYPE套接字类型IPv4、IPv6、unix 等
NAME地址与状态显示为 *:8080 (LISTEN) 即监听所有地址
速度上 ss 更快也更准(直接通过 netlink 从内核取套接字表),lsof -i 要遍历 /proc 里各进程的文件描述符,连接多时明显更慢;但 lsof 的好处是能直接给出命令路径与属主。实践中用 ss 定位端口、再用 lsof 看进程细节最省事。
lsof 只能看到仍有进程持有的套接字:处于 TIME_WAIT 之类已经没有进程关联的连接它看不到,那类情况必须用 ss。反过来,如果 lsof 结果为空而端口确实被占用,先确认是不是权限不足——普通用户看不到他人进程的条目。
需要脚本解析时用 -F 定制输出字段,例如 lsof -Fpcn 会按字段标识输出 PID、命令名与地址端口,比解析默认的表格对齐文本稳。默认输出为了人看而做了列宽对齐与名称截断,不适合直接交给 awk 取列。

易错点

  • -i 与其它条件默认是「或」关系,要取交集必须加 -a,否则会看到远超预期的结果
  • TIME_WAIT 等无进程持有的套接字 lsof 看不到,那类查询要用 ss
  • 连接数量多的机器上 lsof 明显慢(需要遍历各进程的 fd 表),大批量排查优先用 ss
  • 非 root 运行时看不到其它用户的进程细节,结果为空的结论不可靠
  • 端口写法的语义不同:-i :8080 匹配端口,-i @host 匹配对端地址,组合时注意加 -a

数据来源与参考

  • man 8 lsof(lsof 官方手册)

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌