在Linux系统中,查询端口状态是网络管理和系统运维中的常见操作,主要用于检查端口是否开放、监听状态、连接情况以及相关进程信息,掌握多种命令工具可以帮助用户高效诊断网络问题,以下是常用的Linux查询端口状态的命令及其详细使用方法。

netstat命令
netstat是一个传统的网络工具,用于显示网络连接、路由表、接口统计等信息,虽然在新版Linux中逐渐被ss替代,但仍有广泛使用。
基本语法
netstat [选项] [参数]
常用选项及示例
-
查看所有监听端口:
netstat -tuln
-t:显示TCP端口-u:显示UDP端口-l:仅显示监听端口-n:以数字形式显示地址和端口,避免DNS解析
-
显示所有端口(包括监听和非监听):
netstat -an
-a:显示所有连接
-
显示进程ID和进程名:
(图片来源网络,侵删)netstat -tulnp
-p:显示进程ID和名称(需root权限)
-
统计端口协议类型:
netstat -s
输出说明
输出表格包含以下列:
Proto:协议类型(TCP/UDP)Local Address:本地IP和端口Foreign Address:远程IP和端口State:连接状态(如LISTEN、ESTABLISHED)PID/Program name:进程ID和名称(使用-p时显示)
ss命令
ss是netstat的替代工具,速度更快,功能更强大,默认在大多数现代Linux发行版中可用。
基本语法
ss [选项] [过滤条件]
常用选项及示例
-
查看所有监听端口:
ss -tuln
选项与
netstat类似,-t、-u、-l、-n含义相同。 -
显示TCP和UDP连接:
ss -t -a # 显示所有TCP连接 ss -u -a # 显示所有UDP连接
-
显示进程信息:
ss -tulnp
-
显示socket统计摘要:
ss -s
-
过滤特定端口:
ss -tuln 'sport = :22' # 查询22端口
输出说明
输出表格包含以下列:
Netid:协议类型State:连接状态Recv-Q:接收队列Send-Q:发送队列Local Address:Port:本地地址和端口Peer Address:Port:远程地址和端口Process:进程信息
lsof命令
lsof(List Open Files)用于列出系统打开的文件,包括网络连接、设备文件等。
基本语法
lsof [选项] [文件/目录/端口]
常用选项及示例
-
查看指定端口的占用情况:
lsof -i :8080 # 查询8080端口
-i:指定网络地址
-
显示所有网络连接:
lsof -i
-
显示UDP端口:
lsof -i UDP
-
显示TCP端口:
lsof -i TCP
输出说明
输出表格包含以下列:
COMMAND:进程名PID:进程IDUSER:进程所有者FD:文件描述符TYPE:文件类型(IPv4、IPv6)DEVICE:设备号SIZE/OFF:文件大小NODE:索引节点NAME:网络地址或端口
nmap命令
nmap(Network Mapper)是一款网络扫描工具,可扫描远程主机的端口状态。
基本语法
nmap [选项] [目标IP/域名]
常用选项及示例
-
扫描本地主机的开放端口:
nmap localhost
-
扫描特定端口:
nmap -p 22,80,443 localhost
-
扫描UDP端口:
nmap -sU localhost
-
详细输出:
nscan -v localhost
输出说明
输出显示目标主机的端口状态(open、closed、filtered)及服务信息。
/proc文件系统
通过读取/proc/net目录下的文件,可直接查看内核网络状态信息。
示例
-
查看TCP端口:
cat /proc/net/tcp cat /proc/net/tcp6 # IPv6
-
查看UDP端口:
cat /proc/net/udp cat /proc/net/udp6 # IPv6
输出格式
输出为十六进制格式,需转换IP和端口号,本地地址0500000A:0016表示IP0.0.5和端口22(十六进制0016转十进制)。
综合对比
以下是各命令的对比表格:
| 命令 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| netstat | 兼容性好,功能全面 | 速度较慢,逐渐被淘汰 | 传统系统或兼容性要求高的场景 |
| ss | 速度快,功能强大 | 选项复杂,学习成本较高 | 现代Linux系统快速诊断 |
| lsof | 可查看文件和进程关联 | 仅限本地端口查询 | 查找端口占用进程 |
| nmap | 支持远程扫描,功能丰富 | 需额外安装,扫描可能被拦截 | 远程主机端口探测 |
| /proc | 直接读取内核数据,无需工具 | 输出格式复杂,需手动解析 | 深度调试或脚本自动化 |
相关问答FAQs
Q1: 如何快速查看本机所有监听的TCP端口?
A1: 使用ss -tln或netstat -tln命令。
ss -tln
输出将显示所有监听的TCP端口及其IP地址,Local Address:Port列即为所需信息。
Q2: 如何查找占用8080端口的进程并终止它?
A2: 先用lsof -i :8080查找进程ID(PID),再用kill命令终止。
lsof -i :8080 # 输出如:nginx 1234 root 3u IPv4 0t0 TCP *:8080 (LISTEN) kill -9 1234 # 强制终止PID为1234的进程
注意:kill -9为强制终止,建议优先使用kill或kill -15。
