Linux日常运维中,查看TCP端口状态是一项非常基础但又极其重要的技能。无论你是排查网络连接问题、检查服务是否正常启动,还是监控服务器安全,都离不开对TCP端口的准确掌握。这篇文章会带你系统地了解几种最实用、最常用的查看TCP端口的命令linux查看tcp端口命令,让你在碰到网络问题时不再手足无措。

用netstat查看监听端口

netstat是Linux系统里最经典的网络诊断工具之一,很多老运维人第一个想到的就是它。它能显示网络连接、路由表、接口统计等信息,功能非常全面。

查看端口使用情况linux_linux查看tcp端口命令_端口查看命令linux

要查看所有TCP端口的监听状态,可以使用这样的命令:netstat -tlnp。这里的-t表示只显示TCP连接,-l表示只显示正在监听的端口,-n以数字形式显示地址和端口号,-p则显示对应的进程信息。如果你想知道某个端口比如80端口是否被占用linux查看tcp端口命令,可以加上grep过滤:netstat -tlnp | grep :80

很多时候你会发现,netstat在较新的Linux发行版中已经渐渐被淘汰了,有些系统甚至默认没有安装。不过只要你的服务器上有这个命令,它依然能快速帮你定位问题。比如当你的Nginx起不来,跑一下netstat -tlnp,马上就能看到是不是端口被占用了,占用它的又是哪个进程。

用ss命令更高效地查看端口

端口查看命令linux_linux查看tcp端口命令_查看端口使用情况linux

ss是socket statistics的缩写,可以理解为netstat的升级版。它在性能上有明显优势,尤其是在服务器连接数特别多的时候,ss命令的执行速度远超netstat。

查看当前系统所有TCP端口的连接情况,最简单的命令是ss -tlnp。这个参数和netstat几乎一模一样,-t代表TCP,-l表示监听状态,-n不解析服务名,-p显示进程信息。如果你想看所有建立的连接而不是仅仅监听状态,把-l去掉即可:ss -tnp

ss命令还有一个很实用的功能,就是按状态过滤TCP连接。比如你想看看系统里有多少TIME_WAIT状态的连接,可以这样写:ss -t state time-wait。这对排查连接数过多、端口耗尽等问题特别有用。如果你发现服务器端口不够用,用这个命令一看,TIME_WAIT堆积如山,你就知道该调整内核参数了。

linux查看tcp端口命令_端口查看命令linux_查看端口使用情况linux

用lsof查看端口对应的进程

lsof全称是list open files,在Linux里一切皆文件,网络连接也是一种文件。所以lsof天然就能查看哪些进程占用了哪些端口。

当你想知道某个端口是被谁占用时,lsof是最直观的工具。比如查80端口,命令是lsof -i :80。输出结果里会清清楚楚地显示进程PID、进程名称、用户等信息。如果你想看所有TCP连接,可以写成lsof -i TCP,不过输出内容会非常多,建议结合grep使用。

查看端口使用情况linux_端口查看命令linux_linux查看tcp端口命令

lsof还有一个典型场景是排查端口冲突。比如你启动一个服务报端口已被占用,但不知道是谁占的,跑一下lsof -i :端口号,立刻就能看到占用进程的PID,然后用kill命令处理。这种方式比netstat和ss更直观,因为lsof直接告诉你进程名和用户,不用再额外查pid对应的服务。

用telnet测试远程端口是否开放

前面几个命令都是查看本机的端口状态linux系统安装,但很多时候我们需要测试远程服务器的端口是否通。这时候telnet就派上用场了。

测试一个远程端口是否开放的命令格式很简单:telnet 目标IP 目标端口。比如你想测试百度服务器的80端口是否通,可以输入telnet 80。如果端口是开放的,你会看到Connected to的提示,如果端口不通或者被防火墙挡住了linux内核,连接就会被拒绝或者超时。

需要注意的是,很多最小化安装的Linux系统默认没有telnet客户端,你可以用yum或者apt安装。另外telnet本身是不加密的,生产环境一般只把它当作测试工具,不会用它来远程管理服务器。如果你只是想快速判断一个端口是否通,telnet绝对是最简单直接的办法,没有之一。

这些命令掌握了,绝大部分端口相关的排查工作你都能轻松应对。日常工作中,ss和lsof用得最多,netstat在老系统上也会遇到,telnet则是测试远程端口的神器。多动手敲几遍,很快就能形成肌肉记忆。

Tagged:
Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复