Linux 怎么查看端口占用?

启动服务时提示端口被占用,想知道是哪个进程在用

解决方案

用 ss 查看(推荐,现代方式) 推荐

# 查看所有监听端口
ss -tlnp

# 查看特定端口
ss -tlnp | grep :3000

# 输出示例:
# LISTEN  0  128  *:3000  *:*  users:(("node",pid=1234,fd=12))

ss 是 netstat 的现代替代品,速度更快。-t=TCP -l=监听 -n=数字端口 -p=显示进程。

适用场景:大多数现代 Linux 系统

用 lsof 查看 推荐

# 查看占用某端口的进程
sudo lsof -i :3000

# 输出示例:
# COMMAND  PID  USER  FD  TYPE  DEVICE  SIZE/OFF  NODE  NAME
# node    1234  dev  12u  IPv4  12345  0t0  TCP  *:3000 (LISTEN)

lsof -i 列出网络连接。需要 sudo 才能看到其他用户的进程。

适用场景:需要详细的进程信息

用 netstat 查看(旧版系统)

netstat -tlnp | grep :3000

netstat 在新系统中可能需要安装 net-tools 包。功能与 ss 类似但较慢。

适用场景:旧版系统没有 ss 命令

找到并杀死占用端口的进程

# 方法 1:lsof + kill
kill $(lsof -t -i:3000)

# 方法 2:fuser
fuser -k 3000/tcp

lsof -t 只输出 PID,方便配合 kill 使用。fuser -k 直接杀死占用端口的进程。

适用场景:确认要终止占用端口的进程

注意事项

kill 进程前确认它不是关键服务
lsof 需要 sudo 才能看到完整信息
Docker 容器的端口映射也会占用宿主机端口

相关命令