常用Shell命令查看端口占用情况
在日常运维或开发中,经常会遇到服务启动失败的问题,最常见的原因之一就是端口被占用了。这时候就需要通过Shell命令快速查看哪些端口正在被使用。
最常用的命令是 netstat 和 lsof,它们能帮你列出当前系统的端口监听状态和对应进程。
使用 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 :80ss 是较新的工具,性能比 netstat 更好,很多现代Linux发行版默认已安装。上面这条命令会搜索是否有服务在监听 80 端口。
比如你在部署Nginx时发现启动报错“Address already in use”,就可以用这种方式定位是不是之前有个残留进程没关掉。
实际应用场景举例
假设你在本地开发一个Node.js应用,默认要用 3000 端口。但运行时浏览器打不开页面,第一反应应该是检查端口有没有正常监听:
lsof -i :3000如果看到有 node 进程在跑,但你确定没启动,那可能是上次关闭不彻底。可以直接杀掉:
kill $(lsof -t :3000)然后再重新启动服务,问题往往就能解决。
这些小命令看似简单,但在调试环境、部署服务、排查故障时非常实用。掌握它们之后,不再需要盲目重启或者到处翻日志。