别再用 netstat 了:用 ss 三步定位 Linux 端口占用

举报
yd_260195027 发表于 2026/10/23 12:07:03 2026/10/23
【摘要】 netstat 已逐渐被淘汰,本文用 ss 命令三步定位 Linux 端口占用:查看监听、确认进程、决定放行,并附常用过滤变体。

在日常运维里,「端口被谁占用了」大概是被问得最多的问题之一。很多人第一反应是 netstat -tunlp,但较新的发行版里 netstat 所属的 net-tools 已经默认不再安装,取而代之的是 iproute2 套件里的 ss 命令。ss 直接读取内核的 socket 信息,速度更快、信息更全。下面用三步快速定位端口占用。

第一步:查看谁在监听指定端口

假设发现 8080 端口起不来,先执行:

ss -tlnp | grep :8080

参数含义:-t 只看 TCP,-l 只看 LISTEN 状态,-n 不做域名解析(更快),-p 显示占用进程。输出里会直接给出进程名和 PID,例如 users:(("java",pid=2381,fd=87))。

第二步:确认是哪个进程、哪个用户

拿到 PID 后,用 ps 补充上下文:

ps -o pid,ppid,user,cmd -p 2381

这样能看到进程的父进程、运行用户和完整启动命令,判断是不是自己部署的服务,还是系统里的其他守护进程误占了端口。如果是容器环境,还可以用 docker ps --format '{{.ID}} {{.Ports}}' 反向确认容器映射。

第三步:决定放行还是释放

如果确认是自己不需要的旧进程,直接 kill PID 释放;如果是需要的服务,就改配置换端口,或在防火墙/安全组里放行。放行时记得同时检查两层:系统防火墙 firewall-cmd --list-ports 或 ufw status,以及云厂商安全组。经常出现「本机 curl 通、外部不通」就是安全组没放行。

几个实用变体

  • ss -s:快速看整机 socket 统计,排查连接暴涨。
  • ss -tn state established '( dport = :443 )':只看发往 443 的已建立连接。
  • ss -tlnp 'sport = :80':只过滤源端口 80,无需再管道 grep。

小结:把 ss -tlnp 记成肌肉记忆,比 netstat 更快也更可靠;排查端口问题时,按「看监听 → 认进程 → 定放行」三步走,基本能覆盖绝大多数场景。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。