Linux端口管理常用命令大全(含ss/netstat/lsof用法)

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 是传统端口查看工具,功能与 ss 类似,但性能较弱,且现代 Linux 发行版(如 Ubuntu 20.04+、CentOS 8+)已不再默认预装。

常用用法

命令 用途 参数解析
netstat -tuln 查看所有监听的 TCP/UDP 端口 参数含义与 ss 完全一致(-t/-u/-l/-n)
netstat -tulnp 查看监听端口及对应进程 增加 -p 显示进程信息(需 root 权限)

安装说明(若系统未预装)

# Debian/Ubuntu 系列
sudo apt update && sudo apt install net-tools

# CentOS/RHEL 系列
sudo yum install net-tools

二、查看当前所有网络连接(含外部连接)

除本地监听端口外,还需了解系统与外部主机的连接状态(如已建立连接、等待连接等),用于排查异常外部连接或服务通信问题。

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 命令(查看端口占用进程)

lsof(List Open Files)可查看进程打开的文件与网络连接,能直接定位 “哪个进程占用了目标端口”,功能更灵活。

常用命令

# 查看 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 status
CentOS:sudo firewall-cmd --list-all
sudo iptables -L -n -v 系统默认工具更适配,操作简单
端口连通性测试 nc -zv IP 端口 telnet IP 端口 nc 支持静默测试(-z),更适合脚本自动化
阅读剩余