Shell命令查看端口状态的实用方法

常用Shell命令查看端口占用情况

在日常运维或开发中,经常会遇到服务启动失败的问题,最常见的原因之一就是端口被占用了。这时候就需要通过Shell命令快速查看哪些端口正在被使用。

最常用的命令是 netstatlsof,它们能帮你列出当前系统的端口监听状态和对应进程。

使用 netstat 查看端口

如果你的系统中安装了 netstat(通常在 net-tools 包中),可以运行以下命令查看所有监听中的TCP端口:

netstat -tuln

其中各参数含义如下:

  • -t:显示 TCP 端口
  • -u:显示 UDP 端口
  • -l:仅显示监听状态的端口
  • -n:以数字形式显示地址和端口号,不进行DNS解析

如果想同时看到是哪个进程占用了端口,可以加上 -p 参数(需要 root 权限):

sudo netstat -tulpn

输出结果中会多出一列 “PID/Program name”,清楚地告诉你哪个程序在使用该端口。

使用 lsof 查看指定端口

另一个更灵活的工具是 lsof,它可以根据端口号反查进程信息。比如你想知道 8080 端口是否被占用:

lsof -i :8080

这条命令会列出所有使用 8080 端口的网络连接和对应进程。如果返回空结果,说明这个端口目前没人用。

你也可以查找某个特定协议的端口,例如只查 TCP:

lsof -i tcp:3306

这在排查数据库连接问题时特别有用。

快速判断端口是否可用的小技巧

有时候你只是想快速确认一个端口能不能用,比如准备启动一个Web服务。可以先试试这条命令:

ss -tuln | grep :80

ss 是较新的工具,性能比 netstat 更好,很多现代Linux发行版默认已安装。上面这条命令会搜索是否有服务在监听 80 端口。

比如你在部署Nginx时发现启动报错“Address already in use”,就可以用这种方式定位是不是之前有个残留进程没关掉。

实际应用场景举例

假设你在本地开发一个Node.js应用,默认要用 3000 端口。但运行时浏览器打不开页面,第一反应应该是检查端口有没有正常监听:

lsof -i :3000

如果看到有 node 进程在跑,但你确定没启动,那可能是上次关闭不彻底。可以直接杀掉:

kill $(lsof -t :3000)

然后再重新启动服务,问题往往就能解决。

这些小命令看似简单,但在调试环境、部署服务、排查故障时非常实用。掌握它们之后,不再需要盲目重启或者到处翻日志。