在 Linux 系统运维和故障排查过程中,检查端口监听状态是最基础也是最重要的操作之一。通过查看哪些端口正在被监听,可以快速定位服务是否正常运行、排查端口冲突问题、以及识别潜在的安全风险。本文将详细介绍三款常用的端口检查工具:ss、netstat 和lsof,帮助系统管理员高效完成网络诊断工作。
1. 什么是监听端口
在深入工具使用之前,有必要先理解"监听端口"的概念。
监听端口是指应用程序或进程在特定网络端口上等待传入连接的网络端点。每个监听端口由以下三个要素唯一标识:
- 端口号:用于区分不同服务的数字标识(如 80、443、22 等)
需要特别注意的是,同一 IP 地址、同一协议、同一端口不能被两个服务同时占用。例如,如果 Apache 已经占用了 80 端口,再启动 Nginx 就会因为端口冲突而失败。
2. ss 命令:现代首选工具
2.1 工具简介
ss(Socket Statistics)是netstat 的现代替代品,具有以下优势:
2.2 常用命令与参数
2.2.1 查看所有监听端口
sudo ss -tunlp
参数说明:
典型输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=445,fd=3))
LISTEN 0 128 *:3306 *:* users:(("mysqld",pid=534,fd=30))
LISTEN 0 128 [::]:80 [::]:* users:(("apache2",pid=765,fd=4))
输出关键字段解析:
- State:套接字状态,
LISTEN 表示端口正在等待传入连接 - Local Address:Port:进程监听的 IP 地址和端口号
2.2.2 查找特定端口的监听进程
方法一:使用 grep 过滤
sudo ss -tnlp | grep :22
方法二:使用 ss 内置过滤(推荐,效率更高)
sudo ss -tlnp sport = :22
2.2.3 查看已建立的连接
ss -tn state established
3. netstat 命令:经典兼容工具
3.1 工具简介
netstat 是一款历史悠久的网络统计工具,虽然已被标记为"过时(obsolete)",但由于其广泛的兼容性和熟悉的输出格式,仍然在许多环境中被使用。
注意:现代 Linux 发行版默认不安装 netstat,需要手动安装 net-tools 包。
3.2 安装方法
# Debian/Ubuntu 系列:
sudo apt install net-tools
# RHEL/CentOS/Fedora 系列:
sudo dnf install net-tools
3.3 常用命令
3.3.1 查看所有监听端口
sudo netstat -tunlp
参数含义与ss 完全相同:-t(TCP)、-u(UDP)、-n(数字地址)、-l(仅监听)、-p(进程信息)。
典型输出示例:

[root@yyzc*** ~]# netstat -tunlp
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:111 0.0.0.0:* LISTEN 768/rpcbind
tcp 0 0 192.168.122.1:53 0.0.0.0:* LISTEN 1500/dnsmasq
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1129/sshd
tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1132/cupsd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1237/master
tcp6 0 0 :::111 :::* LISTEN 768/rpcbind
tcp6 0 0 :::1521 :::* LISTEN 125320/tnslsnr
tcp6 0 0 :::22 :::* LISTEN 1129/sshd
tcp6 0 0 ::1:631 :::* LISTEN 1132/cupsd
tcp6 0 0 :::13624 :::* LISTEN 125533/ora_d000_yyz
tcp6 0 0 ::1:25 :::* LISTEN 1237/master
tcp6 0 0 :::5500 :::* LISTEN 125320/tnslsnr
udp 0 0 0.0.0.0:5353 0.0.0.0:* 751/avahi-daemon: r
udp 0 0 0.0.0.0:34426 0.0.0.0:* 751/avahi-daemon: r
udp 0 0 192.168.122.1:53 0.0.0.0:* 1500/dnsmasq
udp 0 0 0.0.0.0:67 0.0.0.0:* 1500/dnsmasq
udp 0 0 0.0.0.0:111 0.0.0.0:* 768/rpcbind
udp 0 0 0.0.0.0:924 0.0.0.0:* 768/rpcbind
udp6 0 0 ::1:42913 :::* 125533/ora_d000_yyz
udp6 0 0 ::1:40392 :::* 125535/ora_s000_yyz
udp6 0 0 ::1:16463 :::* 125520/ora_lreg_yyz
udp6 0 0 :::111 :::* 768/rpcbind
udp6 0 0 :::924 :::* 768/rpcbind
[root@yyzc*** ~]#
3.3.2 查找特定端口的监听进程
[root@yyzc*** ~]# netstat -tnlp | grep :22
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1129/sshd
tcp6 0 0 :::22 :::* LISTEN 1129/sshd
[root@yyzc*** ~]#
4. lsof 命令:文件视角的端口检查
4.1 工具简介
lsof(List Open Files)是一款功能强大的工具,用于查看进程打开的文件。在 Linux 的设计理念中,一切皆文件,网络套接字也不例外。因此,lsof 同样可以用于检查端口监听状态,其独特优势在于能够清晰地展示进程、用户与端口之间的关联关系。
4.2 常用命令
4.2.1 查看所有监听的 TCP 端口
sudo lsof -nP -iTCP -sTCP:LISTEN
# 参数说明:
| 参数 | 含义 |
|---|
-n | |
-P | |
-iTCP | |
-sTCP:LISTEN | |
# 典型输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
rpcbind 768 rpc 8u IPv4 20145 0t0 TCP *:111 (LISTEN)
rpcbind 768 rpc 11u IPv6 20148 0t0 TCP *:111 (LISTEN)
sshd 1129 root 3u IPv4 26143 0t0 TCP *:22 (LISTEN)
sshd 1129 root 4u IPv6 26145 0t0 TCP *:22 (LISTEN)
cupsd 1132 root 10u IPv6 27882 0t0 TCP [::1]:631 (LISTEN)
cupsd 1132 root 11u IPv4 27883 0t0 TCP 127.0.0.1:631 (LISTEN)
master 1237 root 13u IPv4 27356 0t0 TCP 127.0.0.1:25 (LISTEN)
master 1237 root 14u IPv6 27357 0t0 TCP [::1]:25 (LISTEN)
dnsmasq 1500 nobody 6u IPv4 29413 0t0 TCP 192.168.122.1:53 (LISTEN)
tnslsnr 125320 oracle 8u IPv6 2046821 0t0 TCP *:1521 (LISTEN)
tnslsnr 125320 oracle 16u IPv6 2054255 0t0 TCP *:5500 (LISTEN)
ora_d000_ 125533 oracle 8u IPv6 2054158 0t0 TCP *:13624 (LISTEN)
# 输出关键字段解析:
4.2.2 查找特定端口的监听进程
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
5. 常见问题与注意事项
5.1 进程信息列显示为空
如果在使用-p 参数时发现进程信息列空白,最常见的原因是权限不足。端口所属的进程信息只有 root 用户或具有 sudo 权限的用户才能查看。解决方法是使用sudo 执行命令。
5.2 监听端口与已建立连接的混淆
-l 参数的作用是仅显示处于 LISTEN 状态的端口。如果省略该参数,工具会显示所有连接状态(包括 ESTABLISHED 等),导致输出信息过多。如果目的是检查服务是否正常运行,务必加上-l 参数。
5.3 使用 grep 过滤端口时的常见错误
在使用grep 按端口号过滤时,必须包含冒号。例如,应使用grep :22 而不是grep 22。后者会错误匹配 PID、IP 地址中包含数字 22 的其他行,导致结果不准确。
6. 快速参考表
| 任务 | 命令 |
|---|
| sudo ss -tunlp |
| sudo netstat -tunlp |
| sudo ss -tlnp sport = :80 |
| sudo ss -tnlp | grep :80 |
| sudo lsof -nP -iTCP -sTCP:LISTEN |
| sudo lsof -nP -iTCP:3306 -sTCP:LISTEN |
| ss -tn state established |
| sudo ss -tunp |
7. 总结
三款工具各有特点,适用于不同的场景:
- ss:现代 Linux 系统的首选工具,速度快、信息全面、默认安装,推荐在日常运维中优先使用。
- netstat:经典工具,适合需要与旧系统兼容或团队成员更熟悉其输出格式的场景,但需注意其已被标记为过时。
- lsof:从文件和进程视角出发,特别适合需要同时查看端口、进程和用户关联关系的深度排查场景。