在Mac上查看服务器端口号,核心命令是lsof -i :端口号,配合netstat和nc即可完成绝大多数排查任务。这个结论基于macOS自带的网络工具集,无需安装额外软件,下面按照从高频到低频的使用场景,拆解具体操作方法和判断逻辑。
mac查看端口号命令:lsof的三种核心用法
lsof(list open files)是macOS上查看端口占用情况的首选工具,因为Unix系系统将网络连接也视为文件,大多数开发者在Mac上排查端口冲突时,超过80%的场景靠这一条命令就能定位问题。
查看指定端口被哪个进程占用
当你在启动Nginx、MySQL或Node服务时提示“Address already in use”,需要在终端执行:
lsof -i :8080
输出结果中重点看两列:COMMAND显示进程名称(如node或nginx),PID是进程编号,NAME会显示具体监听地址,如果要释放端口,执行kill -9 PID即可,但建议先确认进程身份再操作。
查看所有监听中的端口列表
lsof -i -P | grep LISTEN
这条命令会列出所有正在监听(LISTEN状态)的端口及其对应进程。-P参数强制显示端口数字而非服务名称,避免出现http、mysql这类别名干扰判断,输出结果可能较多,建议配合grep过滤关键词,例如筛选Java进程:lsof -i -P | grep java。
mac端口号被占用怎么解决:从查找到清理的完整流程
- 执行
lsof -i :8080定位占用进程的PID - 执行
ps -p PID -o command查看该进程的完整启动命令,确认是否为老旧残留或重要服务 - 若确认可以终止,执行
kill PID;若提示权限不足,改用sudo kill -9 PID - 再执行
lsof -i :8080,确认输出为空即表示端口已释放
排查技巧:如果lsof输出为空但服务仍提示端口被占用,可能是其他机器占用了同一局域网IP的端口,或在Docker容器内部监听而未映射到宿主机,此时改用下面的netstat查看完整网络栈。
netstat命令:查看已建立的连接与端口状态
macOS自带的netstat侧重显示网络连接状态,而非进程对应关系,它适合验证端口是否在监听,以及查看已建立的连接数量。
sudo netstat -an | grep 3306
输出中LISTEN表示正在监听,ESTABLISHED表示已有客户端连接,注意此命令不显示进程名,需要配合lsof -i :3306确认是哪个程序,在项目联调时排查“端口通不通”的场景,netstat比lsof更直观。
使用场景对比
| 需求 | 推荐命令 | 关键输出 |
|---|---|---|
| 端口被占,找进程 | lsof -i :8080 |
进程名 + PID |
| 查看端口监听状态 | netstat -an | grep 8080 |
LISTEN/ESTABLISHED |
| 验证远程端口连通性 | nc -vz 192.168.1.10 22 |
succeeded/failed |
mac查看服务器端口连通性:nc和telnet的实战应用
当你需要确认远程服务器的某个端口是否对外开放,或本地到云服务器的网络链路是否正常,用nc(netcat)是最快的方式。
nc -vz -w 5 你的服务器IP 443
-v输出详细信息,-z表示只扫描不发送数据,-w 5设定超时时间(秒),如果看到succeeded或Connection succeeded,说明端口可达;出现Connection refused则说明端口关闭或服务未启动,
Operation timed out通常意味着防火墙拦截,此时要重点排查云服务商的安全组规则和本地网络防火墙,这是mac查看服务器端口号的常见疑问点之一,因为nc的退出码判断常让新手困惑只要返回0即可判定端口开放,不必仔细读英文输出。
与telnet的取舍
macOS Mojave及以后版本已默认不安装telnet客户端,首次使用会提示“command not found”,需通过brew install telnet手动安装,行业共识认为telnet在交互式调试时仍有优势连接成功后能直接发送HTTP请求或SMTP指令,但日常连通性检测建议优先用nc,避免额外安装依赖。
使用网络工具类App查看端口号
部分用户习惯用图形化界面操作,App Store中有多款网络诊断工具,它们的核心原理仍是调用底层的lsof和netstat,常见选择包括:
- iNet Tools:提供端口扫描和局域网设备发现功能,适合非技术背景的网站管理员排查服务器端口映射是否生效
- Network Utility:macOS自带的图形化工具(位于
/System/Library/CoreServices/Applications/),在“Port Scan”标签页输入IP即可扫描常用端口开放情况
这类工具的优势是无需记忆命令参数,但启动速度和自动化能力不如命令行,对需要反复检测大量端口的场景(比如运维巡检),建议还是用脚本批量执行nc命令。
端口查看过程中的特殊情况处理
权限不足导致输出为空
当使用lsof -i :80查询80端口时,非管理员用户可能看到空结果,但这不代表端口空闲,这是因为1024以下的端口属于特权端口,普通用户无权读取对应进程信息,此时在命令前加sudo即可,输入管理员密码后能看到完整输出。
端口显示为“:8080”而非具体IP
lsof输出中:8080表示该端口绑定在所有网络接口上(0.0.0.0),外网IP和回环地址都能访问,若只想让本机访问,需要检查服务的监听配置并改为
0.0.1:8080,例如Node.js的app.listen(8080, '127.0.0.1'),或者Nginx的listen 8080改为listen 127.0.0.1:8080。
PID动态变化导致重复查找
多数Linux发行版和macOS会在进程重启后复用PID,因此记录或传递给其他人的PID会很快过期。正确的做法是把查询命令写入脚本,每次排查时动态获取,例如创建一个findport.sh脚本:
#!/bin/bash
lsof -i :$1 | awk 'NR==2 {print $2}'
保存后执行./findport.sh 9000,输出PID后直接复制到kill命令中。
mac查看服务器端口号相关常见问题
Q1:lsof命令在Mac上的安装位置在哪?lsof是macOS系统自带工具,无需安装,如果提示“command not found”,大概率是/usr/bin路径未加入环境变量,执行export PATH=/usr/bin:$PATH后重试即可,这与Linux的yum install lsof场景不同,不要混淆。
Q2:如何查看Mac本机所有对外监听的端口?
执行sudo lsof -i -P | grep LISTEN,会输出类似nginx 1234 root 15u IPv4 0x1234 0t0 TCP :80 (LISTEN)的结果,聚焦COMMAND列可快速知道当前运行了哪些网络服务,检查输出是否纯净时,重点关注是否有陌生进程监听公网网卡IP而不是回环地址。
Q3:端口查看命令在macOS和Linux上通用吗?lsof和netstat在两者上基本通用,但注意macOS的netstat缺少-p参数(Linux用它显示PID),macOS查询PID必须回到lsof -i :端口号,这是两平台最大的命令差异,另一个细节是macOS的lsof要求sudo才能显示所有进程的完整信息,否则只能看到当前用户进程。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/680507.html





