查看Linux服务器端口号,最直接的方法是使用ss -tlnp或netstat -tlnp命令,它们能一次性列出所有监听端口及其对应进程。
搞清楚Linux端口查看的核心逻辑
很多朋友第一次接触Linux服务器时,面对黑乎乎的终端窗口,最懵的就是“我服务明明启动了,到底起没起来?端口通不通?” 其实查看端口这件事,本质就两句话:看哪些端口在监听,看哪个进程占用了这个端口。
咱们日常工作中最常见的场景无非三种:部署完Nginx想确认80端口有没有起来、排查“端口被占用”的报错、或者想知道某个进程到底监听了哪些端口,围绕这三个场景,下面的命令足够覆盖90%以上的需求。
在动手敲命令前,你需要明白一个关键概念:Linux下所有网络连接都是文件描述符,而查看端口就是去读这些描述符的状态,理解了这一点,你就知道为什么ss和netstat的输出格式那么像了,因为它们本质上是同一类工具。
最推荐的ss命令:现代Linux标配
如果你用的是CentOS 7及以上、Ubuntu 18.04及以上版本,ss命令是系统自带的,不需要额外安装,它的速度比netstat快很多,尤其在服务器连接数较多时优势明显。
基础用法:列出所有监听端口
ss -tlnp
拆解一下这五个参数的含义:
-t:只看TCP协议-l:只看正在监听的端口(LISTEN状态)-n:以数字形式显示端口号,不做域名解析,速度更快-p:显示占用该端口的进程PID和名称
执行后输出大概长这样:
State Local Address:Port Process
LISTEN 0.0.0.0:80 nginx: master
LISTEN 0.0.0.0:22 sshd
LISTEN 127.0.0.1:3306 mysqld
看到0.0.0:80表示Nginx在所有网卡上都监听80端口,0.0.1:3306表示MySQL只允许本机访问,外部无法直接连接。
只看某个特定端口
有时候你只关心一个端口是否正常,比如想确认Redis的6379是否在监听:
ss -tlnp | grep 6379
或者用更精确的写法:
ss -tlnp sport = :6379
后一种写法直接按源端口过滤,输出更干净,但记住等号两边需要空格。
查看所有连接而不只是监听
如果端口没监听,但你想看它是不是处于TIME_WAIT或ESTABLISHED状态,去掉-l参数即可:
ss -tnp
这个命令能看到当前所有TCP连接,包括已经建立的连接,当你怀疑某个端口被大量TIME_WAIT连接拖垮时,这个命令就派上用场了。
netstat命令:老牌工具依然能打
虽然说ss是未来的趋势,但很多老运维或者早期文档里还是习惯用netstat,如果你的系统提示netstat: command not found,说明没装net-tools工具包,用yum或apt装一下即可:
# CentOS / RHEL yum install -y net-tools # Ubuntu / Debian apt install -y net-tools
常用组合拳
netstat -tlnp
参数含义与ss一致,输出格式也几乎相同,除了这个,还有两个变体值得收藏:
# 查看所有端口包括UDP netstat -ulnp # 查看Unix域套接字(常用于本地进程间通信) netstat -xlnp
处理PID为空的情况
普通用户执行netstat -tlnp时,如果看到端口对应进程显示,说明当前用户权限不够,看不到其他用户的进程信息,这时候加上sudo就能解决:
sudo netstat -tlnp
如何根据进程名反查端口
这是linux怎么查看服务器端口号被哪个进程占用最常见的反向需求,假设你只知道进程叫java,想找到它绑定的端口:
sudo netstat -tlnp | grep java
或者先用ps找到PID,再用PID过滤:
ps -ef | grep java sudo netstat -tlnp | grep 12345
这里的12345是你从上一步ps输出中看到的PID。
用lsof命令精准定位文件占用
lsof的全称是“list open files”,因为Linux一切皆文件,端口也是文件的一种,这个命令在排查问题时非常灵活,特别适合解决linux服务器端口被占用怎么解决这个问题之前先找出元凶。
查看端口被哪个进程占用
sudo lsof -i :8080
输出中会列出PID、进程名、用户等信息,如果没有任何输出,说明这个端口当前没有被占用。
查看某个进程打开了哪些端口
sudo lsof -i -P | grep nginx
-P参数禁止端口号转为服务名,这样显示的是数字端口而非http这种名字,排查时更直观。
lsof和ss/netstat的定位差异
ss和netstat是“从网络层看端口”,lsof是“从文件层看端口”,日常排查时先用ss -tlnp快速扫一遍,遇到搞不清具体文件句柄的情况再用lsof深挖,效率最高。
查看端口连通性的实战技巧
上面的命令都是在服务器本地查看监听状态,但有时候你需要在另一台机器上验证端口是否通,这就涉及连通性测试,业内专家指出,端口监听正常不等于服务可用,防火墙策略、安全组规则都可能拦截流量。
本机测试端口是否响应
curl -v telnet://127.0.0.1:80
如果看到Connected to 127.0.0.1字样,说明端口可达,也可以直接用telnet:
telnet 127.0.0.1 80
连接成功会进入一个空命令行界面,按Ctrl+]再输入quit退出。
使用nc检测端口状态
nc(netcat)比telnet更轻量,适合脚本中使用:
nc -zv 127.0.0.1 3306
-z表示不发送数据只扫描端口,-v输出详细信息,返回Connection succeeded说明端口通。
批量检查多个端口
服务器开了很多服务时,一个个试太慢,可以写个简单的循环:
for port in 22 80 443 3306; do nc -zv 127.0.0.1 $port 2>&1 done
这个脚本会依次检查四个端口,适合上线前的自检环节。
不同发行版下的注意事项
虽然命令大同小异,但不同Linux发行版还是有一些细微差别。
CentOS / Rocky Linux / Almalinux
- 默认自带
ss,netstat需要安装net-tools - 防火墙是firewalld,查看端口规则用
firewall-cmd --list-ports,本地端口通了但外部访问不了,先查这个 - SELinux可能拦截非标准端口,如果端口明明监听了但外部死活连不上,检查一下SELinux的布尔值
Ubuntu / Debian
- 默认自带
ss,netstat同样需要安装net-tools - 防火墙是ufw,用
ufw status查看端口放行规则 - Ubuntu默认禁止root远程登录,所以查看其他进程的端口信息时,记得加
sudo
云服务器和物理机的差异
如果你用的是简米云、酷番云、华为云的云服务器,除了服务器内部的防火墙,还要检查云控制台的安全组规则,这几年常见的故障就是:ss命令显示端口在监听,curl本机能通,但外部访问超时,这时候八成是安全组没放行对应的入方向端口,行业共识认为,云服务器的端口排查应遵循“先看服务监听、再看系统防火墙、最后看云安全组”的顺序。
端口查看结果异常时怎么办
看到端口没有按预期监听时,先别急着重启服务,按照下面的排查路径走一遍。
确认服务是否真的在运行
systemctl status nginx
如果服务状态是active (running)但端口没监听,可能是配置里绑定了错误的IP地址,比如你配置了listen 127.0.0.1:80,那只能在服务器本机访问,外网看到的80端口就是关闭的。
检查配置文件里的端口号
以Nginx为例:
grep -r "listen" /etc/nginx/
这个命令会显示所有Nginx配置文件中监听端口的设置,看看是不是端口号写错了,或者有两个配置文件冲突。
确认端口没有被其他进程抢占
sudo ss -tlnp | grep :80
如果有其他进程占用了80端口,Nginx自然起不来,报错信息往往是“address already in use”。
高频问题快速参考表
| 需求场景 | 推荐命令 | 说明 |
|---|---|---|
| 查看所有监听端口 | ss -tlnp |
最实用,信息完整 |
| 查看某个特定端口 | ss -tlnp \| grep 80 |
用grep过滤 |
| 查看端口被哪个进程占用 | sudo lsof -i :8080 |
直接显示PID |
| 查看某个进程监听的端口 | sudo netstat -tlnp \| grep nginx |
按进程名过滤 |
| 本机测试端口通不通 | curl -v telnet://127.0.0.1:80 |
不用额外装包 |
| 批量检查端口连通性 | nc -zv 127.0.0.1 端口 |
适合写脚本 |
| 查看UDP端口 | ss -ulnp |
UDP比TCP难看,用这个最直接 |
一套顺手的工作流
最终回到最初的问题:linux怎么看服务器端口号,最快的路径是直接运行ss -tlnp,看到输出列表后,用grep关键字过滤你关心的端口,如果显示监听中,再用curl做一次本机连通性测试;如果外部访问失败,依次检查系统防火墙和云安全组。
对于刚接触服务器运维的朋友,记住一个原则就行:先看监听,再测连通,最后查防火墙,把这个排查顺序刻在脑子里,端口相关的坑基本都能填平。
常见问题Q&A
Linux下端口查看命令提示No such file or directory怎么办?
这通常是系统缺少对应工具包,例如netstat命令找不到,执行yum install net-tools或apt install net-tools安装后即可。ss命令属于iproute2包,大多数系统已预装。lsof则通过yum install lsof或apt install lsof安装。
为什么ss显示端口在LISTEN但grep不到对应的进程名?
执行ss -tlnp时若当前用户权限不足,进程名和PID会显示为空,使用sudo ss -tlnp重新执行即可看到完整的进程信息,如果加了sudo依然看不到,则可能是该端口由内核线程占用,通过ss -tlnp | grep 端口号确认监听状态即可。
云服务器本地端口通但公网访问不了怎么排查?
先执行ss -tlnp确认服务监听在0.0.0而非0.0.1,再检查系统防火墙并确认云控制台安全组已放行对应端口,这三步里安全组规则是云服务器最容易忽略的环节,特别是新购实例默认只放行22和3389端口。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/790343.html


