在Linux系统运维中,网络端口占用情况的排查是常见任务,无论是解决服务冲突、验证服务启动状态,还是进行安全审计,都需要准确掌握端口的使用情况,本文将详细介绍Linux下查看网络端口占用的常用方法,包括命令参数、使用示例及适用场景。
使用netstat命令查看端口占用
netstat
是传统的网络工具,虽然在新版Linux中逐渐被ss
替代,但仍广泛使用,尤其在需要兼容旧系统时,通过netstat
可以查看TCP、UDP端口的监听状态、连接情况及占用进程。
常用参数组合:
-t
:显示TCP端口-u
:显示UDP端口-l
:仅显示监听端口(LISTEN状态)-n
:以数字形式显示地址和端口(不解析域名和服务名)-p
:显示占用端口的进程ID(PID)和名称
示例命令:
netstat -tulnp
执行后输出类似内容:
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:22 0.0.0.0:* LISTEN 1234/sshd
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 5678/mysqld
udp 0 0 0.0.0.0:68 0.0.0.0:* 9012/dhclient
列说明:Proto
(协议)、Local Address
(本地IP:端口)、State
(连接状态,如LISTEN表示监听)、PID/Program name
(进程ID及名称)。
进阶用法:
查看指定端口占用(如80端口):
netstat -tulnp | grep :80
使用ss命令查看端口占用
ss
是iproute2
工具包的一部分,相比netstat
,ss
在处理大量网络连接时速度更快,输出信息更简洁,是当前Linux系统推荐使用的工具。
常用参数组合:
-t
:TCP端口-u
:UDP端口-l
:仅显示监听端口-n
:数字形式显示-p
:显示进程信息-a
:显示所有端口(包括非监听)
示例命令:
ss -tulnp
输出示例:
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=1234,fd=3))
LISTEN 0 80 127.0.0.1:3306 0.0.0.0:* users:(("mysqld",pid=5678,fd=32))
UNCONN 0 0 192.168.1.100:68 0.0.0.0:* users:(("dhclient",pid=9012,fd=5))
列说明:State
(连接状态)、Local Address:Port
(本地IP:端口)、users
(进程信息)。
进阶用法:
查看所有TCP连接(包括已连接、监听等):
ss -t -a
使用lsof命令查看端口占用
lsof
(list open files)用于列出系统打开的文件,在Linux中,网络端口被视为文件,因此可通过lsof
查看端口对应的进程。
常用参数:
-i
:指定网络条件,如-i :端口号
查看指定端口-P
:不显示端口号对应的服务名-n
:不解析IP地址为域名
示例命令:
查看3306端口占用:
lsof -i :3306
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 5678 mysql 3u IPv4 12345 0t0 TCP localhost:3306 (LISTEN)
列说明:COMMAND
(进程名)、PID
(进程ID)、NAME
(端口及状态)。
进阶用法:
查看所有网络连接:
lsof -i
工具对比与选择
以下为三种工具的简要对比:
工具 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
netstat | 兼容旧系统,参数直观 | 速度慢,逐渐被弃用 | 需兼容旧版Linux的系统 |
ss | 速度快,信息简洁,功能全面 | 部分旧系统可能未预装 | 新版Linux系统(推荐) |
lsof | 可通过文件描述符精准定位端口 | 输出信息相对复杂,需过滤 | 需查看端口详细进程信息时 |
注意事项
- 权限问题:查看其他用户的进程需使用
sudo
,如sudo ss -tulnp
。 - 端口范围:Linux端口范围为0-65535,其中0-1023为特权端口,需root权限使用。
- 状态区分:
LISTEN
表示服务正在监听,ESTABLISHED
表示已建立连接,TIME_WAIT
表示连接关闭等待中。
相关问答FAQs
Q1:如何快速找到占用特定端口的进程?
A:使用ss
或lsof
结合grep
过滤端口,
# 查看8080端口占用 ss -tulnp | grep :8080 # 或 lsof -i :8080
输出结果会直接显示占用该端口的进程ID、名称及详细信息。
Q2:为什么执行netstat
命令提示“command not found”?
A:部分Linux系统(如Ubuntu 20.04+)默认未安装netstat
,需手动安装:
- Ubuntu/Debian:
sudo apt install net-tools
- CentOS/RHEL:
sudo yum install net-tools
安装后即可使用netstat
命令。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/14123.html