在Linux服务器上查看端口号,最直接的办法是登录后执行 ss -tulnp(或 netstat -tulnp),输出里本地地址冒号后面的数字就是正在监听的端口号;想查某个具体端口被谁占用,用 sudo lsof -i:端口号 更快。
端口号是Linux网络排查里绕不开的一环,服务起不来、网站打不开、数据库连不上,十有八九要先看一眼端口在不在、被谁占着、绑到了哪个地址,下面按实际排查顺序拆开讲,命令都能直接复制验证。
端口号不是文件,它藏在内核的网络栈里
Linux里的端口号不是某个目录下的文件,而是内核网络协议栈的一部分,应用调用 bind() 把套接字绑到某个端口,内核记录下来,ss、netstat、lsof 这些工具本质上是去读内核暴露的信息。
- 端口号范围是 0 到 65535,0 到 1023 是知名端口,普通用户不能直接绑定。
- 监听端口表示有程序在等连接,状态通常是
LISTEN;已建立连接表示已经有会话,状态是ESTAB。 - 查看端口时重点看三样:协议(tcp/udp)、本地地址、进程名和PID。
也可以直接读 /proc/net/tcp 和 /proc/net/tcp6,但里面的端口是十六进制,可读性差,日常排查没必要绕这一圈,行业共识认为,先用高层命令定位,再按需深入内核文件,效率最高。
Linux服务器端口号怎么查看是否被占用
登录服务器后,先跑一条总览命令:
ss -tulnp:列出所有TCP和UDP监听端口,并显示进程。-t是TCP,-u是UDP,-l只看监听,-n不解析服务名,-p显示进程。ss -tulnp | grep ':8080':只看8080端口。sudo lsof -i:8080:按端口反查进程,输出直观。sudo fuser -v 8080/tcp:快速看谁占着这个端口。netstat -tulnp:老牌命令,很多老教程在用,新系统可能没预装。
ss -tulnp 的典型输出里,Local Address:Port 这一列最关键。0.0.0:80 表示监听所有IPv4地址的80端口,0.0.1:3306 表示只监听本机回环地址,[::]:22 表示IPv6监听。users:(("nginx",pid=1234,fd=6)) 则直接告诉你进程名和PID。
注意:不加 sudo 时,-p 可能看不到其他用户的进程信息,输出里的 users 字段会是空的,这不是端口没被占用,而是权限不够。
netstat和ss查看端口号有什么区别
这两个命令经常被拿来比较,实际差异主要在依赖包和性能上。
| 对比项 | ss | netstat |
|---|---|---|
| 所属软件包 | iproute2 | net-tools |
| 现代发行版默认安装 | 多数默认有 | 不少新系统需手动装 |
| 读取方式 | 直接读内核 | 遍历 /proc 较多 |
| 连接数很大时 | 响应更快 | 相对慢一些 |
| 输出习惯 | 字段紧凑 | 老运维更熟悉 |
结论很直接:新系统优先用 ss,老系统或脚本里已经写了 netstat 就继续用,两者都能完成端口查看,不存在谁完全替代谁的问题,如果服务器上 netstat 提示 command not found,装 net-tools 即可,但更建议直接适应 ss。
云服务器Linux查看端口号开放状态的实操路径
这是最容易踩坑的场景:ss -tulnp 明明看到 0.0.0:8080 在监听,浏览器却打不开,原因通常不在端口查看本身,而在“本机监听”和“外部可达”之间隔了好几层。
按下面顺序排查:
- 第一层,本机监听:
ss -tulnp | grep ':8080',确认绑定地址不是0.0.1。 - 第二层,本机防火墙:CentOS系看
firewall-cmd --list-ports,Ubuntu系看ufw status,老系统看iptables -L -n。 - 第三层,云平台安全组:登录云控制台,检查入方向规则是否放行了对应端口和协议。
- 第四层,外部验证:从另一台机器执行
telnet 公网IP 8080或nc -zv 公网IP 8080,有回应才说明链路通。
放行命令示例:
- firewalld:
sudo firewall-cmd --add-port=8080/tcp --permanent && sudo firewall-cmd --reload - ufw:
sudo ufw allow 8080/tcp - iptables:
sudo iptables -I INPUT -p tcp --dport 8080 -j ACCEPT
需要提醒的是,安全组和系统防火墙是两套东西,只开一层不够,业内专家指出,云主机端口不通的案例里,很大比例是安全组没放行,而不是服务没起来。
华南地区机房Linux服务器端口号排查也有类似差异:托管物理机通常没有云控制台安全组,端口不通要先查机房边界防火墙和交换机ACL;云主机则要先看控制台安全组,再看系统防火墙,场景不同,排查顺序要调整。
Linux服务器端口号查看工具收费吗
日常排查用到的 ss、netstat、lsof、fuser 都是系统自带或开源软件,不收费。nmap 也是开源工具,用于端口探测,但生产环境扫描前要确认授权,商业监控平台按主机数或实例数收费,适合长期监控,不适合临时查端口,云控制台里查看安全组规则同样免费,真正要避免的是在网上随便下载所谓“端口查看器”,来源不明的二进制文件风险很高。
按端口找进程,按进程找端口
实际运维里有两个方向,命令不一样。
已知端口号,反查是哪个程序占的
sudo ss -tulnp | grep ':8080'sudo lsof -i:8080sudo fuser -v 8080/tcp- 确认进程后先
kill -15 PID平滑退出,别上来就kill -9。
如果端口处于 TIME_WAIT,并不代表被程序占用。ss -tan state time-wait | wc -l 可以统计数量,短连接多的服务出现大量 TIME_WAIT 属于正常现象,调内核参数比反复杀进程更有效。
已知进程,看它开了哪些端口
sudo ss -tulnp | grep 'pid=1234'sudo lsof -p 1234 -a -isudo ss -tanp | grep 1234,这条会连同已建立连接一起列出。
容器场景要单独看。docker ps 能看到端口映射,docker port 容器名 能列出具体映射关系,docker inspect 容器名 里的 NetworkSettings 字段更完整。容器内监听 8080,宿主机没做 -p 映射,外面照样访问不到,这时候在宿主机上查端口是查不出结果的。
几个容易看走眼的细节
0.0.1:8080和0.0.0:8080完全不同,前者只允许本机访问,后者才对外监听。- IPv6 的
::8080在多数Linux默认配置下会同时接受IPv4连接,但并非所有服务都这样,别默认认为一定覆盖。 ss -tuln不加-p也能看端口,只是看不到进程,适合权限受限时先确认端口状态。- 大量
ESTAB连接不代表端口异常,要结合业务并发看。 - 端口查看命令本身开销很小,
ss读内核信息,对线上服务影响可以忽略;nmap全端口扫描会产生明显流量,避开业务高峰。
关于Linux服务器端口号查看的常见问答
没有root权限怎么查看Linux服务器端口号?
可以执行 ss -tuln 查看监听端口,但 -p 参数显示进程信息通常需要 root 或相应权限。lsof 普通用户只能看到自己启动的进程,也可以读 /proc/net/tcp,但端口是十六进制,需要换算,更稳妥的做法是让管理员为特定命令配置 sudo 权限,而不是直接给完整 root。
ss显示端口在监听,为什么外部还是访问不了?
按绑定地址、本机防火墙、云安全组、外部网络策略四层依次查,先用 ss -tulnp 确认不是只绑了 0.0.1,再查 firewall-cmd 或 ufw,然后看云控制台入方向规则,最后从同网段另一台机器用 nc -zv 验证,四层都通,端口才真正可达。
查看端口号会影响线上服务器性能吗?
ss 直接读取内核网络信息,开销很小,日常排查可以放心执行。netstat 在连接数很大时会慢一些,但通常也在可接受范围,真正需要谨慎的是端口扫描类操作,全端口扫描会产生大量探测包,生产环境应避开业务高峰并在授权范围内进行。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/772951.html


