Linux端口管理常用命令大全(含ss/netstat/lsof用法)
在 Linux 系统运维、网络故障排查及服务部署过程中,查看网络端口状态是核心操作之一 —— 无论是确认本地服务是否正常监听端口、排查进程与端口的关联关系,还是验证防火墙端口放行规则,都需要依赖专业工具与命令。本文系统整理了 Linux 下查看网络端口(监听端口、连接状态、服务端口等)的常用命令,包含命令用途、参数解析、实战示例及安装说明,覆盖从基础查询到进阶排查的全场景需求,适用于运维人员、开发人员及 Linux 初学者。
一、查看系统正在监听的本地服务端口
本地监听端口是服务对外提供访问的 “入口”,需优先确认服务是否正常监听目标端口。
1. ss 命令(推荐:现代高效替代 netstat)
ss(Socket Statistics)是 Linux 系统原生的高性能工具,专注于 socket 统计信息,查询速度比 netstat 更快,支持更多过滤条件,是当前查看端口的首选工具。
常用用法
| 命令 | 用途 | 参数解析 |
|---|---|---|
ss -tuln |
查看所有监听中的 TCP 端口 | -t:仅显示 TCP 端口;-u:仅显示 UDP 端口;-l:仅保留 “监听(LISTEN)” 状态;-n:以数字形式显示端口(不解析服务名,避免 DNS 耗时) |
ss -tulnp |
查看所有监听的 TCP/UDP 端口及对应进程 | 在 -tuln 基础上增加 -p:显示占用端口的进程名称、PID(需 root 权限,信息更完整) |
示例输出
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=1234,fd=3)) # SSH 服务监听 22 端口
tcp LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("MySQLd",pid=5678,fd=12)) # MySQL 服务监听 3306 端口(仅本地访问)
udp UNCONN 0 0 0.0.0.0:53 0.0.0.0:* users:(("dnsmasq",pid=4444,fd=5)) # DNS 服务监听 53 端口(UDP)
2. netstat 命令(兼容旧系统,需手动安装)
常用用法
| 命令 | 用途 | 参数解析 |
|---|---|---|
netstat -tuln |
查看所有监听的 TCP/UDP 端口 | 参数含义与 ss 完全一致(-t/-u/-l/-n) |
netstat -tulnp |
查看监听端口及对应进程 | 增加 -p 显示进程信息(需 root 权限) |
安装说明(若系统未预装)
二、查看当前所有网络连接(含外部连接)
除本地监听端口外,还需了解系统与外部主机的连接状态(如已建立连接、等待连接等),用于排查异常外部连接或服务通信问题。
1. 查看所有 TCP/UDP 连接(监听 + 外部)
# 使用 ss 命令(推荐)
ss -tunap
# 使用 netstat 命令(兼容旧系统)
netstat -tunap
可查看的核心信息
- 本地进程与外部主机的连接(如 “哪个程序在访问外部 IP”);
- 连接状态(
ESTABLISHED已建立、TIME_WAIT等待关闭、SYN_SENT发起连接等); - 本地端口、远程 IP 及远程端口;
- 占用连接的进程名称与 PID。
2. 筛选 “已建立” 的活跃连接
仅查看系统与外部正在通信的有效连接,排除监听、等待等非活跃状态:
# 使用 ss 命令(精准筛选状态)
ss -tun state established
# 使用 netstat 命令(结合 grep 过滤)
netstat -tun | grep ESTABLISHED
三、精准查询:某个端口是否被监听 / 占用
当部署服务时提示 “端口被占用”,或需确认特定端口(如 80、443)是否正常监听,可通过以下命令精准查询。
方法 1:使用 ss 命令(快速过滤)
# 查看 80 端口是否监听(将 80 替换为目标端口)
ss -tuln | grep ':80'
# 示例输出(若 80 端口被 Nginx 监听)
tcp LISTEN 0 128 0.0.0.0:80 0.0.0.0:*
方法 2:使用 lsof 命令(查看端口占用进程)
常用命令
# 查看 80 端口的占用情况(需 root 权限,显示进程信息)
sudo lsof -i :80
# 示例输出(Nginx 占用 80 端口)
COMmanD PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nginx 1234 root 6u IPv4 12345 0t0 TCP *:http (LISTEN)
nginx 5678 www-data 6u IPv4 12345 0t0 TCP *:http (LISTEN)
安装说明(若系统未预装)
# Debian/Ubuntu 系列
sudo apt install lsof
# CentOS/RHEL 系列
sudo yum install lsof
四、反向查询:某个服务对应哪个端口
已知服务名称(如 Nginx、MySQL),但不确定其使用的端口时,可通过以下两种方式查询。
方法 1:查看服务配置文件(最精准)
服务的端口通常在其配置文件中明确定义,直接查看配置文件可获取最准确的端口信息:
| 服务 | 配置文件路径 | 常见端口 |
|---|---|---|
| Nginx | /etc/nginx/nginx.conf 或 /etc/nginx/sites-enabled/ 下文件 |
80(HTTP)、443(HTTPS) |
| Apache | /etc/httpd/conf/httpd.conf(CentOS)或 /etc/apache2/ports.conf(Ubuntu) |
80、443 |
| MySQL/MariaDB | /etc/my.cnf 或 /etc/mysql/my.cnf |
3306 |
| SSH | /etc/ssh/sshd_config |
22(默认) |
方法 2:通过进程关联端口(快速查询)
先找到服务进程,再通过进程关联端口:
# 步骤 1:找到服务进程(以 Nginx 为例)
ps aux | grep nginx
# 步骤 2:通过进程 PID 查看端口(替换 <PID> 为实际进程号)
sudo lsof -i -P -n | grep <PID>
# 简化命令:直接关联服务名与端口
sudo lsof -i -P -n | grep nginx
参数说明
-P:不解析端口对应的服务名(仅显示数字端口);-n:不解析 IP 对应的主机名(加快查询速度)。
五、查看防火墙放行的端口
即使服务正常监听端口,若防火墙未放行该端口,外部仍无法访问。需根据系统默认防火墙工具查询规则。
1. ufw(Ubuntu 默认简易防火墙)
UFW(Uncomplicated Firewall)是 Ubuntu 预装的轻量防火墙,命令简洁:
# 查看防火墙状态及开放端口(基础信息)
sudo ufw status
# 查看详细信息(含端口协议、来源IP等)
sudo ufw status verbose
示例输出
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere # 允许所有 IP 访问 22 端口(SSH)
80/tcp ALLOW Anywhere # 允许所有 IP 访问 80 端口(HTTP)
443/tcp ALLOW 192.168.1.0/24 # 仅允许内网访问 443 端口(HTTPS)
2. firewalld(CentOS/RHEL/Fedora 默认防火墙)
firewalld 是 RHEL 系系统的默认防火墙,支持动态更新规则:
# 查看所有开放的服务与端口(含 zone 信息)
sudo firewall-cmd --list-all
# 仅查看开放的端口(不含服务名)
sudo firewall-cmd --list-ports
示例输出
public (active)
target: default
icmp-block-inversion: no
interfaces: eth0
sources:
services: ssh dhcpv6-client http https
ports: 8080/tcp 8081/tcp
protocols:
forward: no
masquerade: no
...
3. iptables(传统防火墙工具,适用于所有系统)
iptables 是 Linux 底层防火墙工具,功能强大但命令复杂,适用于自定义规则场景:
# 查看 filter 表规则(默认表,负责端口过滤)
sudo iptables -L -n -v
# 查看 nat 表规则(用于端口转发、地址转换)
sudo iptables -t nat -L -n -v
参数说明
-L:列出规则;-n:数字形式显示 IP 和端口;-v:显示详细信息(如数据包计数、流量大小)。
六、其他实用工具与命令
除上述核心命令外,以下工具可辅助完成端口扫描、连通性测试等操作。
| 工具 / 命令 | 用途 | 常用示例 | 安装说明 |
|---|---|---|---|
| nmap | 扫描本地 / 远程主机的开放端口(网络探测工具) | # 扫描远程主机 192.168.1.100 的常用端口nmap 192.168.1.100# 扫描指定端口(80、443)nmap -p 80,443 192.168.1.100 |
sudo apt install nmap(Debian)sudo yum install nmap(CentOS) |
| telnet | 测试远程端口是否可连接(简单直观) | # 测试 192.168.1.100 的 80 端口telnet 192.168.1.100 80 |
sudo apt install telnet(Debian)sudo yum install telnet(CentOS) |
| nc(netcat) | 多功能网络工具(端口测试、监听、文件传输) | # 测试远程端口连通性(-z 不发送数据,-v 显示详情)nc -zv 192.168.1.100 80# 本地监听 8080 端口nc -l 8080 |
多数系统预装,未装则执行:sudo apt install netcat(Debian) |
| systemctl | 查看服务状态,间接判断端口是否正常 | # 查看 Nginx 服务状态(若服务运行,端口通常正常监听)systemctl status nginx |
系统原生工具,无需安装 |
七、实战场景命令汇总
| 需求场景 | 推荐命令 | |
|---|---|---|
| 查看所有监听的 TCP/UDP 端口 | ss -tuln 或 netstat -tuln |
|
| 查看监听端口及对应进程(含 PID) | ss -tulnp 或 netstat -tulnp |
|
| 确认 80 端口是否被监听 | `ss -tuln | grep ':80'或sudo lsof -i :80` |
| 查看系统所有网络连接(含外部) | ss -tun 或 netstat -tun |
|
| 查看与 192.168.1.100 的连接 | `ss -tun | grep '192.168.1.100'` |
| 定位 3306 端口的占用进程 | sudo lsof -i :3306 |
|
| 查看防火墙开放端口(Ubuntu) | sudo ufw status |
|
| 查看防火墙开放端口(CentOS) | sudo firewall-cmd --list-all |
|
| 测试远程 192.168.1.100 的 443 端口是否可通 | telnet 192.168.1.100 443 或 nc -zv 192.168.1.100 443 |
八、总结:推荐命令优先级
| 需求用途 | 首选命令 | 备选命令 | 优势 |
|---|---|---|---|
| 查看监听端口(高效) | ss -tuln |
netstat -tuln |
ss 速度快,支持更多过滤条件 |
| 查看端口与进程关联 | ss -tulnp 或 sudo lsof -i :端口 |
netstat -tulnp |
lsof 定位进程更精准,ss 更简洁 |
| 查看网络连接状态 | ss -tunap |
netstat -tunap |
ss 输出格式更清晰,包含进程信息 |
| 防火墙端口规则查询 | Ubuntu:sudo ufw statusCentOS: sudo firewall-cmd --list-all |
sudo iptables -L -n -v |
系统默认工具更适配,操作简单 |
| 端口连通性测试 | nc -zv IP 端口 |
telnet IP 端口 |
nc 支持静默测试(-z),更适合脚本自动化 |
阅读剩余
网站声明
本站内容可能存在水印或引流等信息,请擦亮眼睛自行鉴别;以免上当受骗;
本站提供的内容仅限用于学习和研究目的,不得将本站内容用于商业或者非法用途;
相关推荐
