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

推荐优先使用 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

标贝AI虚拟主播 标贝AI虚拟主播

一站式虚拟主播视频生产和编辑平台

标贝AI虚拟主播 69 查看详情 标贝AI虚拟主播
  • 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 交叉验证。不复杂但容易忽略权限和协议细节。

以上就是Linux如何查看端口占用_netstat与ss命令定位占用来源实战讲解【教程】的详细内容,更多请关注其它相关文章!

本文转自网络,如有侵权请联系客服删除。