当遇到端口被占用时,可通过 netstat 或 ss 查找进程。1. 使用 netstat -tulnp | grep :端口号,参数分别表示tcp/udp、监听状态、不解析服务名、显示进程信息;2. 使用 ss -tulnp | grep :端口号,功能类似且效率更高;3. 找到进程后可确认是否为正常服务、停止无关进程、修改配置更换端口或排查异常行为,操作前需谨慎确认进程用途。

你有没有遇到过启动服务时提示端口被占用的情况?这时候最直接的需求就是查清楚是哪个进程占用了端口。在Linux系统中,netstat 和 ss 是两个常用的命令行工具,可以用来查看网络连接、路由表、接口统计等信息,也包括查找占用特定端口的进程。

使用 netstat 查看端口占用情况
netstat(network statistics)是一个功能强大的网络统计工具,可以显示各种网络连接状态。虽然现在很多系统推荐使用 ss 命令替代它,但 netstat 依然广泛使用,特别是在一些老版本的系统中。

常用命令格式如下:
netstat -tulnp | grep :端口号
解释一下各个参数:

-
-t:显示TCP连接 -
-u:显示UDP连接 -
-l:只显示监听状态(LISTEN)的连接 -
-n:不解析服务名称,直接显示端口号 -
-p:显示进程ID和名称(需要root权限)
例如,你想查看80端口被谁占用了,可以执行:
netstat -tulnp | grep :80
输出结果中会包含协议、本地地址、外部地址、状态以及PID/进程名等信息。如果看不到进程信息,可能是权限不够,尝试加上 sudo。
注意:某些系统默认没有安装 netstat,你可以通过安装 net-tools 包来获取它。
使用 ss 快速查找端口进程
ss(socket statistics)是 netstat 的现代替代品,速度更快、资源消耗更少,而且语法更简洁。如果你用的是较新的Linux发行版,建议优先使用 ss。
基本命令格式:
ss -tulnp | grep :端口号
参数含义与 netstat 类似:
-
-t:TCP连接 -
-u:UDP连接 -
-l:列出监听中的连接 -
-n:不解析服务名 -
-p:显示关联的进程信息(同样需要root权限)
比如要查看3306端口是否被占用:
ss -tulnp | grep :3306
输出内容和 netstat 差不多,也会显示进程名和PID,方便你定位问题。
如何处理找到的进程?
一旦你找到了占用端口的进程,下一步就是决定怎么处理它。常见做法有以下几种:
确认是否为正常运行的服务
比如MySQL默认使用3306端口,Nginx用80或443,这些属于正常情况。-
停止无关进程释放端口
如果这个进程不是必须的,可以通过kill或kill -9来结束它。例如:sudo kill -9 PID
修改配置更换端口
如果不想杀掉进程,也可以修改你的应用配置,换一个未被占用的端口。排查异常行为
如果发现不明进程占用了常见端口,可能要考虑是否有安全风险,需要进一步排查。
当然,在操作前记得确认进程用途,避免误杀关键服务。
基本上就这些。无论是用 netstat 还是 ss,目的都是快速定位端口占用情况,从而做出相应处理。这两个命令都很实用,掌握它们能帮你节省不少排查时间。










