在Linux和Unix-like系统中,查看服务端口是网络管理和系统运维中的常见操作,通过命令行工具可以快速定位服务监听的端口、端口关联的进程以及网络连接状态等信息,以下是常用的查看服务端口的命令及其详细使用方法,涵盖不同场景下的需求。

使用netstat命令查看端口信息
netstat是一个传统的网络工具,用于显示网络连接、路由表、接口统计等信息,尽管在现代系统中逐渐被ss命令替代,但netstat仍广泛使用,尤其在旧版系统中。
基本语法
netstat [选项] [参数]
常用选项及示例
-
查看所有监听端口:
netstat -tuln
-t:显示TCP端口-u:显示UDP端口-l:仅显示监听状态的端口-n:以数字形式显示地址和端口,避免域名解析,提高速度
示例输出:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN udp 0 0 0.0.0.0:68 0.0.0.0:* -
查看端口关联的进程ID(PID):
(图片来源网络,侵删)netstat -tulnp
-p:显示进程ID和进程名称
示例输出:
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1234/sshd tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5678/mysqld -
查看所有网络连接(包括监听和非监听):
netstat -an
-a:显示所有连接,包括监听和非监听
-
查看指定端口的连接状态:
netstat -tuln | grep 80
netstat命令的局限性
- 在高并发系统中,
netstat的输出速度较慢,因为需要遍历所有网络堆栈。 - 在新版本的Linux发行版中(如CentOS 7+、Ubuntu 18.04+),
netstat可能被ss替代。
使用ss命令查看端口信息
ss是iproute2包的一部分,旨在替代netstat,提供更快速、更详细的网络连接信息。ss命令通过直接读取netlink套接字获取数据,效率远高于netstat。

基本语法
ss [选项] [参数]
常用选项及示例
-
查看所有监听端口:
ss -tuln
-t:TCP端口-u:UDP端口-l:仅显示监听端口-n:数字形式显示
示例输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:* LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* -
查看端口关联的进程信息:
ss -tulnp
-p:显示进程ID和名称
示例输出:
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=5678,fd=31)) -
查看所有TCP连接:
ss -t
-
查看所有UDP连接:
ss -u
-
查看指定端口的连接:
ss -tuln | grep 8080
ss命令的优势
- 速度快,尤其在高并发场景下。
- 支持更多过滤条件,如按状态、协议、端口范围等。
- 输出格式更清晰,便于解析。
使用lsof命令查看端口信息
lsof(List Open Files)是一个列出系统打开文件的工具,在Linux中,一切皆文件,因此网络端口也被视为文件,通过lsof可以查看端口被哪个进程占用。
基本语法
lsof [选项] [参数]
常用选项及示例
-
查看指定端口占用的进程:
lsof -i :80
-i:显示指定协议的端口,80表示TCP/UDP的80端口
示例输出:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1234 root 6u IPv4 12345 0t0 TCP *:http (LISTEN) nginx 1235 www-data 7u IPv4 12346 0t0 TCP *:http (LISTEN) -
查看所有监听端口:
lsof -i -P -n | grep LISTEN
-P:不解析端口号为服务名-n:不解析IP地址为域名
-
查看指定进程的端口占用:
lsof -p 1234
lsof的适用场景
- 适用于需要查看端口与进程详细对应关系的场景。
- 支持按文件描述符、用户、进程等条件过滤。
使用grep结合其他命令过滤端口信息
在实际操作中,经常需要结合grep命令过滤端口信息,
netstat -tuln | grep 3306 ss -tuln | grep 8080 lsof -i :22 | grep LISTEN
不同命令的对比
以下表格总结了三个常用查看端口命令的特点:
| 命令 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
netstat |
兼容性好,支持旧版系统 | 速度慢,功能相对有限 | 旧版Linux系统或简单查询 |
ss |
速度快,功能丰富,推荐使用 | 部分旧系统可能未安装 | 新版Linux系统(CentOS 7+等) |
lsof |
支持按进程、文件描述符过滤 | 输出信息较多,需要结合grep |
需要详细端口-进程映射关系 |
相关问答FAQs
Q1: 如何查看某个端口是否被占用?
A1: 可以使用以下命令组合检查端口占用情况:
- 使用
ss命令:ss -tuln | grep 端口号,若输出结果中包含该端口,则表示已被占用。 - 使用
netstat命令:netstat -tuln | grep 端口号。 - 使用
lsof命令:lsof -i :端口号,若显示进程信息则表示端口被占用。
Q2: 如何查看所有TCP连接状态及对应的数量?
A2: 可以通过以下命令统计TCP连接状态:
ss -tan | awk 'NR>1 {print $1}' | sort | uniq -c
该命令会输出各TCP状态(如ESTAB、LISTEN、TIME_WAIT等)及其对应的连接数量。
10 ESTAB
5 LISTEN
20 TIME_WAIT
ESTAB表示已建立的连接,LISTEN表示监听状态,TIME_WAIT表示等待关闭的连接。
