在Linux里想根据端口号查出是哪个服务器或哪个服务在占用,最直接的命令组合是ss -tulnp和lsof -i:端口号,拿到PID后再用ps -fp PID或systemctl status PID确认程序名和服务器角色,基本十秒内就能定位。
linux根据端口查进程的常用命令
你可能会遇到这种情况:服务器上跑了好几个服务,突然有人告诉你8080端口有问题,你第一反应是这端口到底是谁在监听?这时候不用猜,几条命令就能把幕后进程揪出来。
用ss命令快速定位端口占用
ss是现代Linux发行版默认自带的网络统计工具,速度比老命令netstat快很多,执行下面这条命令,就能看到所有TCP和UDP的监听端口以及对应进程:
sudo ss -tulnp | grep ':8080'
输出结果类似这样:
LISTEN 0 128 0.0.0.0:8080 0.0.0.0: users:(("nginx",pid=1234,fd=6))
关键字段一目了然:nginx是进程名,pid=1234是进程号,如果看到进程名显示为短横线,说明当前用户权限不够,加sudo再跑一次就行。
常用参数组合可以这样记:
-t:只看TCP-u:只看UDP-l:只显示监听中的端口-n:用数字形式显示端口,不反解服务名-p:显示进程名和PID
比如只想查22端口是否被SSH监听,直接用sudo ss -tlnp | grep ':22'。
lsof -i:端口号直接找到服务名
lsof的意思是“list open files”,在Linux里网络连接也是文件,所以它能列出端口对应的进程详情,它的优势是直接显示程序的完整路径,比ss更直观:
sudo lsof -i:8080
输出会包含COMMAND、PID、USER和NAME列,
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 12345 0t0 TCP :8080 (LISTEN)
如果只想查MySQL的3306端口,sudo lsof -i:3306会直接告诉你是不是mysqld在监听,这个命令很适合快速确认“端口被哪个程序占了”这类问题。
linux怎么根据端口找服务并确认服务器角色
拿到PID只是第一步,很多时候你还需要知道这个进程属于哪个服务单元、跑的是什么应用、甚至是不是容器起的,下面就是完整的定位链路。

通过PID反查进程详情和服务名
先执行ps -fp 1234,把PID替换成上一步拿到的进程号,输出会显示完整命令行,
UID PID PPID C STIME TTY TIME CMD
root 1234 1 0 10:20 ? 00:00:00 nginx: master process /usr/sbin/nginx
从这里能看出是Nginx的master进程,说明这台机器上跑的是Nginx Web服务器,如果命令行里有-jar app-name.jar,那就是Java微服务;如果有/usr/local/mysql/bin/mysqld,那就是数据库服务器。
也可以直接读取/proc目录下的信息:
cat /proc/1234/cmdline | tr '
