Linux端口占用如何排查_netstat与ss命令解析【教学】

2次阅读

排查linux端口占用需用ss或netstat查监听进程,ss更轻量快速,netstat更直观;查8080端口运行ss -tuln | grep :8080,加sudo和-p显示PID与进程名;注意区分0.0.0.0、127.0.0.1等绑定地址,避免误判冲突。

Linux端口占用如何排查_netstat与ss命令解析【教学】

排查Linux端口占用,核心是找到监听该端口的进程。netstat 和 ss 都能完成这项任务,但 ss 更轻量、更快,且在新系统中逐步替代 netstat;netstat 功能更直观,适合初学者理解网络状态。

快速查指定端口被谁占用

想确认 8080 端口是否被占用、是谁在用?直接运行:

  • ss -tuln | grep :8080 —— 显示所有监听中的 TCP/udp 端口,过滤出 8080 行(-t:TCP,-u:UDP,-l:仅监听,-n:数字格式,不解析域名和服务名)
  • netstat -tuln | grep :8080 —— 效果类似,但启动稍慢,部分新版发行版默认不预装

输出中重点关注最后一列,如 1234/nginx5678/java,前面数字是 PID,后面是进程名。

显示进程名和 PID(需 root 权限才完整)

普通用户执行时,可能看不到 PID 和进程名(显示为“-”或“*:*”)。要完整显示,加 -p 参数并提权:

  • sudo ss -tulnp | grep :8080
  • sudo netstat -tulnp | grep :8080

注意:-p 要求有 CAP_NET_ADMIN 权限,普通用户即使知道端口,也无法直接看到属主进程,这是安全设计。

Linux端口占用如何排查_netstat与ss命令解析【教学】

星绘

豆包旗下 AI 写真、P 图、换装和视频生成

Linux端口占用如何排查_netstat与ss命令解析【教学】 404

查看详情 Linux端口占用如何排查_netstat与ss命令解析【教学】

区分监听地址:0.0.0.0 vs 127.0.0.1 vs 具体 IP

同一端口可能被多个进程绑定在不同地址上,例如:

  • 0.0.0.0:3306 表示 mysql 对所有网卡开放(外网可访问)
  • 127.0.0.1:3306 表示仅本地回环可用(更安全)
  • 192.168.1.100:3306 表示只监听该内网 IP

排查时务必看清楚 Local Address 列,避免误判“端口冲突”——两个进程分别绑定 127.0.0.1:8080 和 0.0.0.0:8080 是允许共存的。

常见问题与替代方案

如果 ss/netstat 没结果,但端口确实连不上,可能是:

  • 进程未真正监听(比如服务崩溃后残留端口配置)
  • 防火墙拦截(sudo ufw statussudo iptables -L 查看)
  • 使用了 socket 激活(如 systemd socket 单元),进程按需启动,此时 ss 可能查不到活跃连接
  • 容器或 pod 内部端口(需进容器查,或用 docker ps + docker port

不想依赖 netstat/ss?还可尝试:lsof -i :8080(同样需 sudo 查 PID),或 fuser 8080/tcp(简洁输出 PID)。

text=ZqhQzanResources