Linux系统下查看端口占用情况的多种方法

2026-09-02 19:28:41 5 次阅读

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表示进程ID

  • java表示占用该端口的程序

如果想查看指定端口,例如8080:

netstat -tunlp | grep 8080

这种方式适合快速定位Web服务、数据库服务以及Java应用等程序占用情况。

需要注意的是,部分新版本Linux系统默认可能没有安装netstat工具,可以通过安装net-tools解决:

CentOS/RHEL:

yum install net-tools

Ubuntu/Debian:

apt install net-tools

使用ss命令查看端口信息

在现代Linux发行版中,ss逐渐取代了netstat。ss基于内核接口获取网络信息,执行速度更快,显示内容也更加丰富。

查看所有监听端口:

ss -tunlp

查看指定端口:

ss -tunlp | grep 8080

查看TCP端口:

ss -lntp

查看UDP端口:

ss -lnup

ss命令输出示例:

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:LISTEN

lsof特别适合排查“端口被占用但不知道是什么程序”的情况。

使用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