服务器测评网
我们一直在努力

Linux怎么查看监听的端口,Linux查看端口占用状态命令

在Linux系统运维与网络管理中,查看服务器当前监听的端口是排查网络故障、检查安全漏洞及确认服务状态的核心技能,实现这一目标主要依赖三个命令行工具:ss(Socket Statistics)、netstat(Network Statistics)以及lsof(List Open Files)。ss命令作为现代Linux发行版(如CentOS 7+、Ubuntu 18.04+)的默认工具,因其直接读取内核数据而具备极高的执行效率,是查看监听端口的首选方案;netstat虽然较为老旧且逐渐被弃用,但凭借其熟悉的输出格式仍被广泛使用;而lsof则在关联进程与文件描述符方面具有独特优势,掌握这三者的组合使用,能够精准、高效地获取端口监听信息。

Linux怎么查看监听的端口,Linux查看端口占用状态命令

首选方案:使用 ss 命令快速定位

ss命令是iproute2软件包的一部分,它能够从内核中直接获取网络统计信息,比传统的netstat更快速、更详细,在处理高并发服务器的网络连接时,ss的优势尤为明显。

要查看当前系统所有监听的TCP和UDP端口,最常用的参数组合为 -tulpn,具体含义如下:

  • -t:显示TCP协议的套接字。
  • -u:显示UDP协议的套接字。
  • -l:仅显示处于监听状态的套接字。
  • -p:显示使用该套接字的进程信息(PID及程序名称)。
  • -n:以数字形式显示端口号和服务地址,不进行DNS解析,这能显著提高查询速度。

执行命令 ss -tulpn 后,输出信息通常包含以下几个关键字段:Netid(协议类型)、State(连接状态,如LISTEN)、Recv-Q(接收队列)、Send-Q(发送队列)、Local Address:Port(本地监听地址与端口)、Peer Address:Port(对端地址与端口,监听状态下通常为0.0.0.0:*)以及Process(对应的进程信息)。

专业建议:在排查端口占用问题时,建议优先使用 ss -tulpn | grep :端口号 进行快速过滤,查找80端口是否被占用,可以使用 ss -tulpn | grep :80,注意,查看进程信息通常需要root权限,如果普通用户执行后Process列显示为空,请加上 sudo

传统方案:使用 netstat 命令

尽管netstat属于net-tools工具包,在现代Linux中已不再默认安装,但许多资深运维人员对其输出格式非常熟悉,如果系统提示找不到netstat命令,可以通过包管理器(如yum或apt)安装net-tools。

netstat查看监听端口的参数与ss高度相似,同样使用 -tulpn 组合,命令示例为:netstat -tulpn

netstat与ss的核心区别在于性能,netstat通过读取/proc文件系统来获取信息,这在连接数庞大(如数万并发)的服务器上会消耗较多的CPU时间和内存,甚至导致查询卡顿,而ss直接使用netlink协议与内核通信,几乎瞬间完成查询,在生产环境中,强烈建议优先使用ss替代netstat

Linux怎么查看监听的端口,Linux查看端口占用状态命令

辅助方案:使用 lsof 命令

lsof(List Open Files)是一个功能强大的工具,用于列出当前系统打开的文件,在Linux中,“一切皆文件”,网络套接字也被视为文件,lsof可以用来查看端口监听情况。

要查看特定端口的监听情况,可以使用 -i 参数配合端口号,查看22端口的监听情况:lsof -i :22

如果需要查看所有监听端口,可以使用:lsof -i -P -n | grep LISTEN

  • -i:显示网络连接的文件。
  • -P:不将端口号转换为服务名称(即显示数字端口)。
  • -n:不将主机名转换为IP地址。

lsof的优势在于它能够清晰地展示用户、PID、命令名称以及文件描述符(FD),在确认某个特定用户是否非法开启了监听端口时,lsof提供的用户信息列非常有用。

深度解析与故障排查实战

在实际运维场景中,仅仅知道命令是不够的,还需要理解输出背后的含义以及如何解决常见问题。

理解监听地址(Local Address)
在输出结果中,Local Address列通常显示为 0.0.0:800.0.1:3306::80

  • 0.0.0:表示监听在所有IPv4网卡上,外部可以通过任何本机IP访问该端口。
  • 0.0.1:表示仅监听本地回环接口,外部无法直接访问,通常用于数据库等敏感服务,增强安全性。
  • [::]:表示监听在所有IPv6地址上,在双栈网络中,这通常也涵盖了IPv4访问。
  • 特定IP:表示仅绑定到某张网卡,这在多网卡服务器中用于服务隔离。

权限问题与进程隐藏
如果在使用 -p 参数时无法看到进程名称,通常是因为当前用户权限不足,Linux内核出于安全考虑,不允许普通用户查看其他用户或系统进程的套接字详情,此时必须使用 sudo 提权执行命令。

Linux怎么查看监听的端口,Linux查看端口占用状态命令

端口冲突排查
当启动服务失败,提示“Address already in use”时,利用上述命令可以迅速定位“凶手”。

  • 第一步:使用 ss -tulpn | grep :冲突端口号 找到占用端口的PID。
  • 第二步:根据PID判断该进程是否为关键业务,如果是僵尸进程或重复启动的进程,可以使用 kill -9 PID 终止它。
  • 第三步:如果该进程是系统关键服务(如系统自带的httpd占用了80端口),则需要修改新服务的配置文件,使其监听其他端口。

性能优化的独立见解
在处理高并发Web服务器(如Nginx)时,TCP连接的TIME_WAIT状态过多会导致端口资源耗尽,虽然这属于“非监听”状态,但与端口管理息息相关,此时可以使用 ss -s 查看套接字汇总摘要,或者使用 ss -tan state time-wait | wc -l 统计数量,如果数量过大,可能需要调整内核参数 /proc/sys/net/ipv4/tcp_tw_reuse 来优化端口复用。

查看Linux监听端口的核心在于熟练掌握 ss -tulpn,它兼顾了速度、详细程度和易用性,netstat作为补充工具适用于旧环境,而lsof则在需要关联文件描述符或用户信息时发挥作用,理解监听地址的区别、权限限制以及如何快速定位端口冲突,是将这些命令转化为实际生产力的关键,通过这些工具,运维人员可以清晰地掌握服务器的网络服务暴露面,从而保障系统的稳定与安全。


相关问答

Q1:为什么在使用 ss 或 netstat 命令查看端口时,加上 -n 参数很重要?
A1: 加上 -n 参数(Numeric)的作用是禁止命令将端口号和服务名进行反向解析,同时也禁止将IP地址解析为主机名,如果不加 -n,命令会尝试查询 /etc/services 文件或进行DNS查询,这在网络环境复杂或连接数巨大时会导致命令执行速度显著变慢,甚至卡死,在追求效率和排查故障时,始终建议加上 -n 参数。

Q2:如何查看某个特定进程(Nginx)正在监听哪些端口?
A2: 有两种常用方法,第一种是先找到进程的PID,pidof nginx,然后使用 ss -lnp | grep "pid",第二种更直接的方法是使用 lsof 命令结合进程名:lsof -c nginx -a -i -P,这里 -c nginx 指定进程名,-a 表示逻辑与(AND),-i 表示网络文件,-P 显示端口号,这种方法可以直接列出Nginx进程打开的所有监听端口。

赞(0)
未经允许不得转载:好主机测评网 » Linux怎么查看监听的端口,Linux查看端口占用状态命令