在Linux系统中,查询端口对应的服务器或服务,最直接的方法是组合使用netstat、ss和lsof命令,通过端口号反查进程PID,再查看进程名称和所属服务。
这个结论是多年运维工作的基础共识,不管你是刚接触Linux的新手,还是正在排查线上故障的工程师,掌握这个技能都能让你在遇到“端口被占用”或“不知道开了什么服务”时,第一时间定位问题源头。
下面我按照实际操作的思路,把查询方法、查后判断以及常见坑位都拆开讲清楚,顺便把几个容易混淆的概念理一理。
linux查询端口被哪个进程占用:netstat与ss的实战对比
在Linux里,端口本身不“属于”服务器,它只是网络协议栈上的一个数字,我们说“查询端口是哪个服务器”,通常有两层含义:一层是本机上哪个进程在监听这个端口,另一层是这个端口对应的是哪台远程服务器上的服务,先解决第一层,也是日常最高频的需求。
netstat:经典命令,参数要记牢
netstat是Linux下最古老的网络查询工具之一,几乎所有发行版都自带,查询端口对应的进程,用以下组合:
netstat -tlnp
拆开讲:-t只显示TCP连接,-l只显示监听状态的端口,-n不解析域名,直接显示IP和端口数字,-p显示进程PID和名称,你会在输出里看到类似:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:3306 0.0.0.0: LISTEN 1234/mysqld
这里3306端口对应mysqld进程,PID是1234,如果你只是想知道端口被哪个服务占用,这一条命令就够用了。
但netstat有个小缺点:某些现代Linux发行版默认没有安装它,你需要用yum install net-tools或apt install net-tools手动装,在端口连接数很多的情况下,netstat的输出会有些慢。
ss:新一代命令,速度快信息全
现在的CentOS 7+、Ubuntu 18.04+等系统都自带iproute2包,其中的ss命令完全替代了netstat的功能,而且语法更简洁:
ss -tlnp
输出格式与netstat几乎一样。-tTCP,-l监听,-n不解析,-p进程,如果端口被占用,你能直接看到PID和名字,行业共识认为,ss在处理大量连接时性能优势明显,所以你在新部署的服务器上,优先用ss,而不是先装netstat。
lsof:按端口号反查进程,一个命令搞定
如果你已经知道端口号,比如8080

,想直接看是谁占用了它,lsof是最直接的:
lsof -i :8080
输出会列出该端口上的所有连接,包括监听和已建立的连接,关键字段是COMMAND和PID。
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEjava 5678 root 26u IPv6 345678 0t0 TCP :8080 (LISTEN)
说明8080端口被一个名为java的进程监听,PID为5678。lsof在定位“端口冲突”时特别好用,因为你能直接看到进程名称,不用再额外去查。
补充:如果-p看不到进程名怎么办
很多时候你执行netstat -tlnp发现PID/Program name是空的,比如显示为,这通常是因为当前用户权限不够,普通用户只能看到自己的进程,要看到所有进程的端口占用,必须加上sudo:
sudo netstat -tlnpsudo ss -tlnpsudo lsof -i :8080
这个坑几乎每个Linux新手都踩过,所以记住:遇到看不到进程名,先加sudo。
linux查看端口对应服务器ip:本地端口与远程服务器的区别
搞清楚本机进程后,再看“端口对应哪台服务器”这个更宽泛的问题,这里要区分两种情况:端口监听在哪个IP上,以及远程服务器的端口是否开放。
本地监听地址决定能否从外部访问
netstat -tlnp输出中的Local Address列,决定了你的服务绑定在哪。
0.0.0:80表示所有网卡接口上监听,外部网络可以通过服务器的任意IP访问80端口。0.0.1:8080表示只允许本机访问,外部网络无法通过IP直接访问该端口。
这个细节常被忽略,很多用户反馈“端口明明开着,外部就是连不上”,十有八九是绑定到了0.0.1,查询端口对应服务器IP时,首先要看这一列。
如果端口绑定的是0.0.0,那你还需要知道服务器的公网或内网IP地址,才能确定“这个端口属于哪台服务器”,用ip addr或hostname -I可以列出本机所有IP,然后结合ss -tlnp里的监听端口,就能确定这台服务器上开放了哪些服务。
查远程服务器上某个端口是否开放:nmap来帮忙
有时候你要查的目标不是当前这台机器,而是“哪个服务器提供了这个端口服务”,比如公司内部有多个业务服务器,你需要确认0.1.5这台机器是否开放了6379(Redis默认端口),这时需要用nmap:
nmap -p 6379 10.0.1.5
输出会显示PORT STATE SERVICE,如果显示open,说明该端口对外可达,加-sV还能探测端口对应的服务版本:

nmap -sV -p 6379 10.0.1.5
nmap在大多数Linux发行版上需要单独安装,yum install nmap或apt install nmap即可,这个工具在排查多服务器架构下的端口连通性时,比逐台登录去查要高效得多。
linux查询端口对应服务名称:从PID到systemd服务
拿到PID后,你还能进一步确认这个进程到底属于哪个系统服务或软件包,特别是当你只看到一个进程名,但不知道它是什么时候被谁装上的,下面这几步能帮你查个底朝天。
用ps查看进程的详细启动命令
ps -fp PID可以显示进程的完整启动命令,比如PID是5678,执行:
ps -fp 5678
你会看到类似:
UID PID PPID C STIME TTY TIME CMDroot 5678 1 0 10:30 ? 00:00:01 /usr/bin/java -jar /opt/app/myapp.jar
从命令路径就能判断,这端口对应用的是一个自定义Java应用,而不是系统默认服务,再结合ls -l /proc/5678/exe,可以查看实际执行的二进制文件路径,防止伪造进程名的情况。
用systemctl查看服务归属
如果进程名看起来像系统服务,比如nginx、httpd、ssh,直接用systemctl status查询:
systemctl status nginx
输出里会显示服务的加载状态、主进程PID、监听端口(如果有配置),如果要看某个PID对应的服务名,可以用:
systemctl status PID
注意systemctl不一定支持直接跟PID,但大多数现代发行版可以,更稳的办法是:
cat /proc/PID/cgroup
如果输出含system.slice/nginx.service,就能直接确认属于nginx服务,这个技巧在排查“不知道哪个服务占用了端口”时非常有用,因为有些服务是编译安装的,没有通过包管理器注册。
实际场景:端口对应服务器IP查询的完整流程
假设你收到一个告警,说168.1.10这台机器的8080端口流量异常,你手头只有这台服务器的root权限,如何一步步搞清楚“这个端口是谁在提供服务”?
第一步:确认监听状态和进程
sudo ss -tlnp | grep 8080
得到输出如LISTEN 0 100 0.0.0.0:8080 0.0.0.0: users:(("java",pid=3201,fd=24))。
第二步:查看进程详情
ps -fp 3201
发现是/usr/local/app/gateway/gateway-server.jar,说明这是一个Java网关服务。
第三步:确认服务是否由systemd管理
cat /proc/3201/cgroup
输出包含system.slice/gateway.service,然后执行systemctl status gateway

,能看到服务的启动时间、运行状态、最近日志,到这里,你不仅知道端口对应哪个服务器(本机IP),还能直接定位到具体应用和启动方式。
第四步:如果需要查远程服务器,则用nmap
比如你想验证另一台监控服务器能否访问这个端口,在监控机上执行:
nmap -p 8080 192.168.1.10
显示open,说明端口在网络上可达,如果显示filtered,则可能是防火墙拦截了。
这套流程覆盖了从本地到远程、从端口到进程、从进程到服务的完整链路,业内专家指出,排查端口问题最忌讳的是只看一条命令的输出,而是应该把socket状态、进程路径、服务管理方式三个维度结合起来判断,才能减少误判。
常见坑位与补充技巧
- 不要只看
netstat或ss的第一行表头,要注意Local Address列是0.0.0还是,表示IPv6通配,同样意味着所有IPv6地址都能访问。 - 如果你的端口显示为
tcp6,但进程是IPv4的,这通常是因为系统启用了net.ipv6.bindv6only=0,属于正常现象,不用惊慌。 - 使用
fuser命令也可以快速杀端口:fuser -k 8080/tcp会强制终止占用8080端口的进程,但操作前请确认这是你要停的服务。 - 查询UDP端口时,把
-t换成-u,例如ss -ulnp,因为很多服务(如DNS、NTP)走UDP。
Q&A:linux查询端口对应服务器常见问题
linux端口查询命令哪个速度快?
在相同环境下,ss比netstat快,因为ss直接读取内核的socket信息,而netstat要解析/proc/net/tcp等文件,建议日常使用ss -tlnp作为首选,netstat更多用于老系统兼容。
端口对应服务查询到了,但Ping不通是什么原因?
Ping走的是ICMP协议,端口走的是TCP或UDP,两者互不关联,服务器可能屏蔽了ICMP,但TCP端口正常开放,此时应该用telnet IP 端口或nc -zv IP 端口来测试端口连通性,而不是依赖Ping。
linux查端口对应服务器IP,需不需要装额外工具?
最基本的需求用ss和ps就能满足,这两个命令在主流Linux发行版中默认安装,只有需要远程探测或服务识别时,才需要安装nmap,所以从零搭建排查环境时,先记住原生命令,再考虑扩展工具。
最后再强调一次核心结论:Linux查询端口对应服务器,本质上是“端口号 → PID → 进程名 → 服务状态”这条链路,顺着这条链路走,不管是在本机还是远程,都能快速得到答案。
图片来源于AI模型,如侵权请联系管理员。作者:酷小编,如若转载,请注明出处:https://www.kufanyun.com/ask/832675.html


评论列表(1条)
读了这篇文章,我深有感触。作者对比如的理解非常深刻,论述也很有逻辑性。内容既有理论深度,又有实践指导意义,确实是一篇值得细细品味的好文章。希望作者能继续创作更多优秀的作品!