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 容器的端口映射也会占用宿主机端口