在linux服务器的日常运维和故障排查工作中,查看服务器开放的端口和已启用的端口是基础且重要的操作,通过端口信息可以快速判断服务器上运行了哪些服务,是否存在异常端口占用等问题。

常用端口查看命令介绍
1. 使用netstat命令查看端口
netstat是传统的网络状态查看工具,能够显示网络连接、路由表、接口统计等信息,默认情况下部分linux发行版可能没有预装该工具,需要先安装net-tools包。
查看所有已启用的端口(包括监听和已建立连接的端口)的常用命令如下:
# 查看所有端口,包含TCP和UDP,显示进程信息 netstat -tulnp # 参数说明: # -t 显示TCP端口 # -u 显示UDP端口 # -l 仅显示监听状态的端口 # -n 以数字形式显示地址和端口,不解析服务名称 # -p 显示占用端口的进程ID和进程名称
如果只需要查看处于监听状态的开放端口,可以加上-l参数,命令如下:
# 仅查看监听状态的开放端口 netstat -tuln
2. 使用ss命令查看端口
ss是linux系统中更现代的socket统计工具,相比netstat执行速度更快,功能也更丰富,现在大部分linux发行版都默认自带该工具,推荐优先使用。
查看所有监听端口的命令如下:
# 查看所有监听的TCP和UDP端口,显示进程信息 ss -tulnp # 参数说明和netstat类似,-t TCP -u UDP -l 监听 -n 数字显示 -p 进程信息
如果需要查看所有已启用的端口(包含已建立连接的端口),可以去掉-l参数:
# 查看所有TCP和UDP端口,包括已建立连接的 ss -tunp
3. 使用lsof命令查看端口
lsof是列出当前系统打开文件的工具,在linux中一切皆文件,网络连接也属于文件范畴,因此可以通过lsof查看端口占用情况。
查看指定端口的占用情况,比如查看80端口:
# 查看80端口的占用情况 lsof -i:80
如果要查看所有开放的端口,可以使用如下命令:
# 查看所有网络连接对应的端口 lsof -i
端口状态说明
查看端口时常见的状态有以下几种:
- LISTEN:端口处于监听状态,说明有服务在该端口上等待连接,属于开放的端口
- ESTABLISHED:端口已经建立了连接,说明有客户端正在和该端口对应的服务通信
- TIME_WAIT:连接已经关闭,但是端口还处于等待状态,用于保证后续可能到达的延迟数据包被正确处理
- CLOSE_WAIT:被动关闭的一方收到关闭请求后处于的状态,通常是程序没有正确关闭连接导致
不同场景的选择建议
如果是新版本的linux系统,优先使用ss命令,执行效率更高;如果是老旧系统没有ss工具,再使用netstat;如果需要查看某个特定端口被哪个进程占用,使用lsof -i:端口号会更直观。另外查看端口时需要足够的权限,普通用户可能无法查看所有进程的端口信息,建议加上sudo执行命令,比如sudo ss -tulnp。