Linux查看开放端口netstat和ss命令教程
时间:2026-11-14 07:39 作者:emer 分类: 无
在 Linux 运维中,查看服务器到底开放了哪些端口、哪个进程在监听某个端口,是排查网站访问失败、端口冲突、安全扫描的基本功。常用工具是老命令 netstat 和新命令 ss,两者输出接近,但 ss 性能更好、参数更简洁。本文把常用写法一次讲清。
一、netstat 查看监听端口
netstat 在很多发行版里属于 net-tools 包,最小化安装可能没有,先装:
# CentOS7
yum install -y net-tools
# Ubuntu/Debian
apt install -y net-tools
查看所有处于监听状态的 TCP 端口:
netstat -tlnp
参数含义:-t 只看 TCP,-l 只看监听(LISTEN)状态,-n 以数字显示端口不反解域名,-p 显示占用端口的进程名和 PID。
只看某个端口,例如 80:
netstat -tlnp | grep :80
查看所有连接(含已建立的):
netstat -anp
二、ss 命令(推荐,更快)
socket statistics(ss)是 iproute2 自带工具,速度比 netstat 快,参数几乎一一对应:
ss -tlnp
只看监听端口、数字显示、带进程:
ss -ltnp
查看某个端口被谁占用:
ss -tlnp | grep :443
只看 TCP 或 UDP:
ss -tlnp # TCP
ss -ulnp # UDP
三、输出字段怎么读
以 netstat -tlnp 为例,一行大致是:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1024/sshd
- Local Address 里的 0.0.0.0:22 表示监听本机所有网卡的 22 端口;127.0.0.1:3306 表示只允许本机访问。
- State 为 LISTEN 才是正在监听等待连接。
- PID/Program name 就是占用进程,排查端口冲突直接看它。
四、结合 lsof 精确定位
如果只想查单个端口由哪个进程打开,lsof 更直观:
lsof -i:80
没有 lsof 先安装:yum install -y lsof。
常见坑
- 只看 LISTEN 不够:外部能否访问还要叠加防火墙、安全组、绑定地址(0.0.0.0 才对外)。
- netstat 提示 command not found:缺 net-tools 包,yum install net-tools。
- -p 查不到进程名:普通用户看不到其他用户进程,加 sudo 或切 root。
- 端口监听在 127.0.0.1:外部永远连不上,这是很多人“服务起了却访问不到”的原因。
- ss 和 netstat 输出不一致时,以 ss 为准,它直接读内核连接表,更实时。
总结
日常排查推荐 ss -tlnp 一把梭,需要兼容老系统时用 netstat -tlnp,再配合 grep 端口号和 lsof -i:端口 定位进程。记住“监听地址 + 防火墙 + 安全组”三层都放开,端口才真正对外可用。
遇到问题加QQ23979811 协助处理