Linux如何查看端口是否被占用

上周 我使用 ss 命令来检查端口。
在 CentOS 7 上。
SS -图恩 |挂钩:8 08 0 8 :3 0 入住。

结果出来了。
这意味着端口正忙。
我看到PID是1 2 3 4 5
然后我用了lsof。
lsof -i :8 08 0 检查同一时间段。

表示是nginx进程。
用户是root。
它是 TCP 协议。

我确认了。
确实被nginx占用了。
没关系。

linux怎么查看程序占用哪个端口号

说起来,Linux系统上的端口查询真是一门学问。
我在问答论坛上呆了很多年,看到很多人问这个问题。
事实上,Linux系统有多种方法来确定程序占用的端口号,每种方法都有自己的特点。

首先不得不提一下netstat。
这是一个较旧的工具,专门用于检查网络连接和监控状态。
我记得有一次在帮助朋友解决服务器端口问题时使用过这个命令。
要过滤掉特定进程的端口信息,只需在命令行中输入 netstat -tuln|grep <进程名称或 PID> 即可。
该命令中,-t 显示 TCP 连接,-u 显示 UDP 连接,-l 仅显示侦听端口,-n 以数字格式显示端口号。
您可以使用grep过滤来快速找到目标进程的端口。

接下来是 lsof 命令。
该产品通过文件描述符将进程和端口关联起来,直接查询特定端口或进程的占用情况。
我以前用过它来查看特定端口被哪个进程占用。
只需键入 lsof -i <端口号>、lsof -iTCP:<端口号> 或 lsof -iUDP:<端口号> 即可查看进程 ID、用户、命令名称和端口状态。
这非常容易使用。

还有一个现代的 netstat 替代品,即 ss 命令。
查询效率更高,语法与 netstat 类似。
我过去在处理需要快速关注的端口问题时使用过 ss 。
它使用底层内核空间接口,速度快,支持更详细的过滤条件,并且具有适合脚本编写的简洁输出格式。

最后我们要谈谈如何传递/proc文件系统。
这种方法比较详细,适合详细调试。
Linux内核通过/proc虚拟文件系统公开进程信息,每个进程对应一个/proc/目录。
可以先查看进程的PID,然后查看该进程打开的socket文件。
我记得曾经在复杂的网络环境下调试时使用过这个方法。

总之,这些方法都有其优点,因此请根据您的需求选择合适的工具。
例如,为了快速排除故障,您应该首先使用 ss 或 lsof。
对于脚本自动化,请考虑使用 ss-tulnp|awk '{print$5 ,$7 }' 来提取端口和进程名称。
对于低级调试,/proc 方法非常合适。