在CentOS系统中,排查端口占用是日常运维和故障处理中的常见任务,无论是部署服务、调试网络问题,还是确保系统安全,掌握端口占用的查看方法都至关重要,本文将详细介绍在CentOS中如何高效、准确地查询端口占用情况,并涵盖多种实用场景和命令。

使用 ss 命令查看端口占用(推荐)
ss 是Linux系统中替代 netstat 的现代工具,具有更快的查询速度和更丰富的输出选项,在CentOS 7及以上版本中,ss 已成为默认工具。
基本语法
ss [选项] [选项参数]
常用参数
-t:显示TCP端口-u:显示UDP端口-l:只显示监听端口-n:以数字形式显示地址和端口(避免DNS解析,加快速度)-p:显示占用端口的进程ID(PID)和名称
实例操作
-
查看所有监听端口
ss -tulnp
输出示例:
State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 :::80 :::* users:(("nginx",pid=1234,fd=6)) LISTEN 0 128 :::22 :::* users:(("sshd",pid=1155,fd=3))从结果中可以看出,80端口被nginx进程占用,22端口被sshd进程占用。
-
查看特定端口占用
ss -tulnp | grep :8080
若需查看TCP或UDP特定协议的端口,可添加
-t或-u参数:ss -tlnp | grep :3306 # 查看TCP的3306端口
使用 netstat 命令查看端口占用(兼容旧版)
在CentOS 6或更早版本中,netstat 仍是主流工具,其功能与 ss 类似,但查询效率较低。
基本语法
netstat [选项]
常用参数
-t:TCP端口-u:UDP端口-l:监听端口-n:数字形式显示-p:显示进程ID和名称
实例操作
-
查看所有监听端口
netstat -tulnp
-
查看特定端口占用

netstat -tulnp | grep :6379
使用 lsof 命令查看端口占用
lsof(list open files)是一个功能强大的工具,不仅可以查看端口占用,还能显示文件、网络连接等详细信息。
基本语法
lsof -i [协议]:[端口号]
实例操作
-
查看指定端口的占用情况
lsof -i :80
输出示例:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME nginx 1234 root 6u IPv6 12345 0t0 TCP *:http (LISTEN) -
查看所有监听端口
lsof -i -P -n | grep LISTEN
端口占用问题的解决方法
当发现端口被非预期进程占用时,可通过以下步骤处理:
-
确认进程身份
使用ps -ef | grep [PID]查看进程详细信息,判断是否为必要服务。 -
终止占用进程
若为无用进程,可通过kill [PID]或kill -9 [PID]强制终止(谨慎使用-9参数)。 -
修改服务端口
若为重要服务,建议修改其配置文件中的端口设置,例如nginx的listen指令或MySQL的port指令。 -
检查防火墙规则
使用firewall-cmd --list-ports查看防火墙是否开放了目标端口,必要时添加规则:
firewall-cmd --add-port=8080/tcp --permanent firewall-cmd --reload
自动化脚本示例
若需定期监控端口占用情况,可编写Shell脚本实现自动化检查。
#!/bin/bash
port=8080
check=$(ss -tulnp | grep ":$port")
if [ -n "$check" ]; then
echo "端口 $port 被占用: $check"
else
echo "端口 $port 未被占用"
fi
将脚本保存为 check_port.sh,赋予执行权限后即可使用:
chmod +x check_port.sh && ./check_port.sh
FAQs
为什么 ss 命令比 netstat 更快?
ss 命令直接从内核获取网络连接信息,而 netstat 需要遍历/proc文件系统,因此在高并发场景下 ss 的查询效率更高,CentOS 7+已默认集成 ss,推荐优先使用。
如何查看CentOS中所有端口及其对应的进程?
使用以下命令可全面显示TCP和UDP的端口占用情况:
ss -tulnp | awk '{print $5}' | cut -d: -f2 | sort -u | xargs -I {} ss -tulnp | grep ":{}"
或简化为:
ss -tulnp | grep -v "State" | awk '{print $6}' | sort -u
此命令可提取所有端口并关联到对应进程,便于快速定位问题。