发布于2026-07-14 阅读(0)
扫一扫,手机访问
在统信UOS上部署服务时,端口被占用的尴尬场景,相信不少人都遇到过——要么服务启动失败,要么客户端连接被拒绝。要定位这类问题,首先得搞清楚系统当前到底开放了哪些端口、哪些进程在监听。这里得提醒一句:仅靠服务状态检查是远远不够的,因为后台服务、开发调试进程甚至残留的僵尸程序,都可能悄无声息地绑在某个端口上。
下面梳理了五种实用方法,从最常用的命令行工具到底层的手动验证,覆盖了绝大多数排查场景。
ss是UOS系统默认内置的“快手”,不需要额外安装任何包,输出精简,实时性高,比老牌的netstat快得多,也可靠得多。
执行命令:sudo ss -tuln
这一步非常关键——它会直接列出所有TCP和UDP协议中处于LISTEN状态的端口,而且不解析主机名和服务名,避免了DNS延迟带来的干扰。如果输出为空,说明当前没有任何进程主动监听网络端口。如果看到Local Address列里出现0.0.0.0:*或[::]:*,意味着该端口对所有IPv4或IPv6地址开放;而如果是127.0.0.1:*,那就只能本机访问。
当你想知道究竟是哪个程序占用了某个端口时,netstat就派上用场了——它能直接给出PID和可执行路径。不过有个前提:需要先确保net-tools已经安装。
第一步,检查是否安装了netstat:运行 netstat --version;如果提示command not found,执行 sudo apt install net-tools -y 安装即可。
第二步,获取完整的监听列表及进程信息:sudo netstat -tulnp
第三步,定位特定端口,比如检查8080是否被占用:sudo netstat -tulnp | grep ':8080'
【特别提醒:必须加sudo,否则无法读取其他用户进程的路径信息,PID/Program name列会显示为空或“-”,那等于白查】
lsof的巧妙之处在于,它把端口视为“打开的文件”,你只需要输入端口号,就能直接返回进程名、用户、启动命令、工作目录等上下文信息,省去了先查PID再二次验证的麻烦。
方法一:查指定端口,比如3306:sudo lsof -i :3306
方法二:列出全部TCP监听进程:sudo lsof -i -sTCP:LISTEN
如果提示lsof未找到,安装一下就好:sudo apt install lsof -y
ss、netstat或lsof有时候也会“失灵”——比如遇到权限限制,或者进程处于僵尸态、内核模块冲突等异常情况。这时候,/proc文件系统就是最底层的“照妖镜”。
第一步,通过服务名获取疑似进程的PID,例如查找nginx:pidof nginx
第二步,进入其文件描述符目录,筛选出socket文件:sudo ls -l /proc/[PID]/fd/ | grep socket(记得把[PID]替换成实际数字)
第三步,读取TCP监听表,比对端口号:sudo cat /proc/[PID]/net/tcp
这里有个坑需要注意:十六进制端口号是以大端序显示的,例如0000:01BB对应十进制443——【务必注意字节序转换,否则会误判,这个细节很容易翻车】
nc不依赖任何进程信息,只测试网络层的连通性,它能发现一些“看起来在监听,实际无法正常响应”的问题,比如防火墙拦截、服务已崩溃但进程残留、或者监听地址绑定错误等。
本地测试端口631是否可连:nc -zv 127.0.0.1 631
远程测试域名的80端口:nc -zv example.com 80
返回“Connection refused”说明端口未监听或被防火墙阻断;而“Succeeded!”则表示端口开放,有服务在正常响应。
下一篇:剪映如何添加倒计时片头
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
4
5
6
7
8
9