Linux系统中,端口占用情况是服务器运维、程序调试以及网络故障排查过程中经常需要关注的问题。当应用启动失败、服务无法访问、端口冲突或者怀疑某个进程异常监听网络时,快速定位端口对应的进程非常重要。
Linux提供了多种查看端口占用情况的方法,不同命令适用于不同场景。掌握这些工具,可以更加高效地分析服务器网络状态,提升系统维护效率。
使用netstat查看端口占用情况
netstat是Linux系统中较为经典的网络状态查看工具,可以显示网络连接、路由表以及端口监听情况。
查看所有监听端口:
netstat -tunlp参数说明:
-t:显示TCP连接-u:显示UDP连接-n:以数字形式显示地址和端口-l:查看监听状态的端口-p:显示对应进程信息
执行后可以看到类似结果:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 1234/java其中:
8080表示监听端口1234表示进程IDjava表示占用该端口的程序
如果想查看指定端口,例如8080:
netstat -tunlp | grep 8080这种方式适合快速定位Web服务、数据库服务以及Java应用等程序占用情况。
需要注意的是,部分新版本Linux系统默认可能没有安装netstat工具,可以通过安装net-tools解决:
CentOS/RHEL:
yum install net-toolsUbuntu/Debian:
apt install net-tools使用ss命令查看端口信息
在现代Linux发行版中,ss逐渐取代了netstat。ss基于内核接口获取网络信息,执行速度更快,显示内容也更加丰富。
查看所有监听端口:
ss -tunlp查看指定端口:
ss -tunlp | grep 8080查看TCP端口:
ss -lntp查看UDP端口:
ss -lnupss命令输出示例:
LISTEN 0 128 *:8080 *:* users:(("java",pid=1234,fd=50))可以直接看到:
服务名称
进程PID
文件描述符
监听端口
相比netstat,ss在高并发服务器环境下查询效率更高,因此更推荐在生产环境中使用。
使用lsof查询端口对应进程
lsof可以查看系统打开的文件信息。在Linux中,网络连接也会被作为文件处理,因此lsof能够非常方便地查询端口占用情况。
查看指定端口:
lsof -i :8080示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 1234 root 50u IPv6 123456 TCP *:8080 (LISTEN)可以看到:
占用端口的程序名称
进程ID
用户
网络协议
端口状态
如果需要查看所有网络端口:
lsof -i查看TCP监听端口:
lsof -iTCP -sTCP:LISTENlsof特别适合排查“端口被占用但不知道是什么程序”的情况。
使用fuser快速定位端口进程
fuser是一个专门用于查找使用某个文件或资源的进程工具,也可以用于端口查询。
查看8080端口占用:
fuser 8080/tcp输出:
8080/tcp: 1234表示PID为1234的进程正在占用8080端口。
查看详细信息:
fuser -v 8080/tcp结果中会显示:
用户
进程ID
访问权限
程序名称
如果确认进程异常,可以结合kill命令结束:
kill -9 1234不过生产环境中执行结束进程操作前,需要确认该服务是否可以停止,避免影响业务运行。
使用/proc目录查看端口占用
Linux系统中的/proc目录保存着内核和进程相关信息,可以通过查看进程文件获取网络连接情况。
例如查看某个进程:
ls -l /proc/1234/fd可以看到进程打开的文件描述符。
网络连接信息存储在:
/proc/net/tcp