Linux如何查看端口占用_netstat与ss命令定位占用来源实战讲解【教程】

2次阅读

推荐优先使用 ss 查看端口占用,因其更快更轻量;ss -tuln 查监听端口,加 -p(需 root)显示进程,netstat 仅用于旧系统兼容。

Linux如何查看端口占用_netstat与ss命令定位占用来源实战讲解【教程】

linux 查看端口占用,最常用也最有效的是 ssnetstat,但要注意:netstat 已被逐步淘汰,ss 是现代替代方案,更快更轻量,推荐优先使用。

用 ss 快速查端口占用(推荐)

ss(socket statistics)是 iproute2 套件的一部分,内核级支持,响应快、信息全。查看某端口(比如 8080)是否被占用:

  • ss -tuln | grep :8080 —— 查监听中的 TCP/udp 端口(-t TCP, -u UDP, -l 仅显示监听, -n 不解析名称)
  • ss -tulnp | grep :8080 —— 加 -p 显示进程名和 PID(需 root 权限,普通用户会提示 “Permission denied”)
  • 若看到类似 LISTEN 0 128 *:8080 *:* users:(("nginx",pid=1234,fd=6)),说明 nginx 进程(PID 1234)占用了 8080

用 netstat 查端口(兼容旧系统)

netstat 属于 net-tools 包,部分新发行版默认不安装(如 ubuntu 22.04+、centos 8+),需手动装:sudo apt install net-toolssudo yum install net-tools

Linux如何查看端口占用_netstat与ss命令定位占用来源实战讲解【教程】

FlowMuse AI

节点式ai视觉创作引擎

Linux如何查看端口占用_netstat与ss命令定位占用来源实战讲解【教程】 85

查看详情 Linux如何查看端口占用_netstat与ss命令定位占用来源实战讲解【教程】

  • netstat -tuln | grep :3306 —— 查 mysql 默认端口
  • netstat -tulnp | grep :3306 —— 加 -p 显示进程(同样需要 sudo)
  • 输出示例:tcp6 0 0 :::3306 :::* LISTEN 1234/mysqld,其中 1234 是 PID,mysqld 是进程名

查到 PID 后怎么操作?

拿到占用端口的进程 PID(比如 1234),可进一步确认或处理:

  • ps -p 1234 -o pid,ppid,cmd,%mem,%cpu —— 查进程详细信息
  • lsof -i :8080 —— 另一种方式(需安装 lsof:sudo apt install lsof),输出更直观
  • 如需结束进程:sudo kill 1234(温和终止)或 sudo kill -9 1234(强制终止)

常见问题与注意点

  • 非 root 用户执行 -p 参数会看不到进程名,直接报错或空白 —— 记得加 sudo
  • 某些服务(如 docker 容器、systemd socket 激活服务)可能显示为 docker-proxysystemd 占用端口,需结合 docker pssystemctl list-sockets 追踪
  • ipv6 地址(:::80)和 IPv4(*:80)可能分开显示,ss -tuln 默认都包含,不用额外加参数
  • 如果端口“查不到占用”,但启动服务仍报“Address already in use”,可能是 TIME_WAIT 状态残留,可用 ss -tan state time-wait | grep :8080 检查

基本上就这些。ss 是当前首选,netstat 用于过渡或排查老环境;关键是加 -p 看进程、用 sudo 提权、结合 pslsof 交叉验证。不复杂但容易忽略权限和协议细节。

text=ZqhQzanResources