详解 Linux 端口监听检查工具:ss、netstat、lsof

在 Linux 系统运维和故障排查过程中,检查端口监听状态是最基础也是最重要的操作之一。通过查看哪些端口正在被监听,可以快速定位服务是否正常运行、排查端口冲突问题、以及识别潜在的安全风险。本文将详细介绍三款常用的端口检查工具:ss、netstat 和 lsof,帮助系统管理员高效完成网络诊断工作。
1. 什么是监听端口
在深入工具使用之前,有必要先理解”监听端口”的概念。
监听端口是指应用程序或进程在特定网络端口上等待传入连接的网络端点。每个监听端口由以下三个要素唯一标识:
- 端口号:用于区分不同服务的数字标识(如 80、443、22 等)
- IP 地址:绑定的网络接口地址
- 通信协议:TCP 或 UDP
需要特别注意的是,同一 IP 地址、同一协议、同一端口不能被两个服务同时占用。例如,如果 Apache 已经占用了 80 端口,再启动 Nginx 就会因为端口冲突而失败。
2. ss 命令:现代首选工具
工具简介
ss(Socket Statistics)是 netstat 的现代替代品,具有以下优势:
- 执行速度更快,尤其在处理大量连接时表现优异
- 提供更详细的 TCP 状态信息
- 现代 Linux 发行版默认已安装,无需额外安装
常用命令与参数
查看所有监听端口
sudo ss -tunlp
参数说明:
| 参数 | 含义 |
|---|---|
| -t | 显示 TCP 端口 |
| -u | 显示 UDP 端口 |
| -n | 显示数字地址,不解析主机名 |
| -l | 仅显示监听状态的端口 |
| -p | 显示使用该套接字的进程信息(需 root 权限) |
典型输出示例:
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 地址和端口号users:使用该套接字的进程名称和 PID
查找特定端口的监听进程
方法一:使用 grep 过滤
sudo ss -tnlp | grep :22
方法二:使用 ss 内置过滤(推荐,效率更高)
sudo ss -tlnp sport = :22
查看已建立的连接
ss -tn state established
3. netstat 命令:经典兼容工具
工具简介
netstat 是一款历史悠久的网络统计工具,虽然已被标记为”过时(obsolete)”,但由于其广泛的兼容性和熟悉的输出格式,仍然在许多环境中被使用。
注意:现代 Linux 发行版默认不安装 netstat,需要手动安装 net-tools 包。
安装方法
# Debian/Ubuntu 系列:
sudo apt install net-tools
# RHEL/CentOS/Fedora 系列:
sudo dnf install net-tools
常用命令
查看所有监听端口
sudo netstat -tunlp
参数含义与 ss 完全相同:-t(TCP)、-u(UDP)、-n(数字地址)、-l(仅监听)、-p(进程信息)。
典型输出示例:
[root@myzc*** ~]# 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@myzc*** ~]#
查找特定端口的监听进程
[root@myzc*** ~]# 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@myzc*** ~]#
4. lsof 命令:文件视角的端口检查
工具简介
lsof(List Open Files)是一款功能强大的工具,用于查看进程打开的文件。在 Linux 的设计理念中,一切皆文件,网络套接字也不例外。因此,lsof 同样可以用于检查端口监听状态,其独特优势在于能够清晰地展示进程、用户与端口之间的关联关系。
常用命令
查看所有监听的 TCP 端口
sudo lsof -nP -iTCP -sTCP:LISTEN
参数说明:
| 参数 | 含义 |
|---|---|
| -n | 不解析主机名,显示数字地址 |
| -P | 不将端口号转换为服务名 |
| -iTCP | 仅显示 TCP 网络文件 |
| -sTCP:LISTEN | 仅显示 TCP 状态为 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)
输出关键字段解析:
- COMMAND:进程名称
- PID:进程 ID
- USER:运行该进程的用户
- NAME:监听的地址和端口号
查找特定端口的监听进程
sudo lsof -nP -iTCP:3306 -sTCP:LISTEN
5. 常见问题与注意事项
进程信息列显示为空
如果在使用-p 参数时发现进程信息列空白,最常见的原因是权限不足。端口所属的进程信息只有 root 用户或具有 sudo 权限的用户才能查看。解决方法是使用 sudo 执行命令。
监听端口与已建立连接的混淆
-l 参数的作用是仅显示处于 LISTEN 状态的端口。如果省略该参数,工具会显示所有连接状态(包括 ESTABLISHED 等),导致输出信息过多。如果目的是检查服务是否正常运行,务必加上-l 参数。
使用 grep 过滤端口时的常见错误
在使用 grep 按端口号过滤时,必须包含冒号。例如,应使用 grep :22 而不是 grep 22。后者会错误匹配 PID、IP 地址中包含数字 22 的其他行,导致结果不准确。
6. 快速参考表
| 任务 | 命令 |
|---|---|
| 列出所有监听端口(ss) | sudo ss -tunlp |
| 列出所有监听端口(netstat) | sudo netstat -tunlp |
| 查找特定端口的进程(ss 内置过滤) | sudo ss -tlnp sport = :80 |
| 查找特定端口的进程(grep 过滤) | sudo ss -tnlp | grep :80 |
| 列出所有监听 TCP 端口(lsof) | sudo lsof -nP -iTCP -sTCP:LISTEN |
| 查找端口 3306 的进程(lsof) | sudo lsof -nP -iTCP:3306 -sTCP:LISTEN |
| 显示已建立的连接 | ss -tn state established |
| 显示所有连接及进程信息 | sudo ss -tunp |
7. 总结
三款工具各有特点,适用于不同的场景:
ss:现代 Linux 系统的首选工具,速度快、信息全面、默认安装,推荐在日常运维中优先使用。netstat:经典工具,适合需要与旧系统兼容或团队成员更熟悉其输出格式的场景,但需注意其已被标记为过时。lsof:从文件和进程视角出发,特别适合需要同时查看端口、进程和用户关联关系的深度排查场景。
以上关于详解 Linux 端口监听检查工具:ss、netstat、lsof的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 详解 Linux 端口监听检查工具:ss、netstat、lsof
微信
支付宝