厌倦了使用 lsof 命令排查端口,来试试 sonar

简介: `sonar` 是专为开发者打造的智能端口管理工具,一键查看本机及Docker/Compose服务的监听端口,支持日志查看、容器进入、健康检查、依赖图谱、端口监控与环境快照等,大幅提升开发调试与故障排查效率。(239字)

日常开发、线上排查故障时,你还在用 lsof -iTCP -sTCP:LISTEN | grep ... 一点点查端口吗?查完还得花费时间分辨是 Docker 容器服务,还是本机运行的服务。

sonar 是一个面向开发者的端口管理工具,可以直观看到本机所有监听中的服务,包括 Docker 容器、Compose 项目、资源占用和访问地址。相比 lsofnetstat 这些传统命令,它不仅能查端口,还支持查看日志、进入容器、健康检查、监控服务变化、分析服务依赖关系,以及一键管理整套开发环境,特别适合日常开发和排查端口占用问题。

为啥不用 lsof?

lsof 只能看到“谁占用了端口”,但开发/运维场景真正关心:

  • 是 Docker 还是本机进程?
  • 属于哪个 Compose 项目?
  • 服务是否健康?
  • 有没有资源异常?
  • 能不能直接查看日志?

sonar 把这些你需要的场景直接整合在了一起。

快速上手

支持的系统

  • macOS(使用lsof)
  • Linux(使用ss)
  • Windows(使用netstat)

方式一:获取安装包

公 众 号 BugShare 发送 sonar 获取安装包。

软件包对应系统命名:

  • darwin: macOS 内核
  • linux: Linux 系统
  • windows: Windows 系统

下载对应系统的软件包并解压后,将二进制文件按需加入 PATH 环境变量中。

# Linux
cp sonar ~/.local/bin/
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
source ~/.bashrc

# macOS
mkdir -p ~/.sonar
cp sonar ~/.sonar/
echo 'export PATH="$HOME/.sonar:$PATH"' >> ~/.zshrc
source ~/.zshrc

# Windows
1. 将 sonar.exe 放到一个固定目录,例如:D:\tools\sonar\
2. 依次打开:设置 -> 系统 -> 高级系统设置 -> 环境变量 -> 系统变量 -> Path
3. 新建 - 添加: D:\tools\sonar\
4. 一路确定保存
5. 重新打开 PowerShell / CMD

方式二:终端命令

# Homebrew(macOS / Linux)
# macOS 上,会自动安装 sonar-tray 菜单栏应用程序
brew install raskrebs/sonar/sonar

# 安装脚本
curl -sfL https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.sh | bash

# Windows(PowerShell)
irm https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.ps1 | iex

# 使用 Go
go install github.com/raskrebs/sonar@latest

托盘应用程序

仅限 macOS,如果你用 Homebrew 安装,会自动装一个菜单栏应用;
在菜单栏实时显示端口数量和状态。点击可以展开查看所有端口。

sonar tray

PixPin_2026-05-26_16-12-56.png

功能使用

列出端口

直接查看本机所有监听端口及对应服务。

sonar list                     # 显示所有监听端口
sonar list --stats             # 显示 CPU、内存、状态、运行时长等信息
sonar list --filter docker     # 仅显示 Docker 容器端口
sonar list --sort name         # 按进程名称排序
sonar list --json              # 以 JSON 格式输出
sonar list -a                  # 包含桌面应用程序
sonar list -c port,cpu,mem,uptime,state # 自定义显示列
sonar list --health            # 执行 HTTP 健康检查
sonar list --host user@server  # 通过 SSH 扫描远程机器

默认情况下,Sonar 会隐藏与开发无关的桌面应用和系统服务,例如 Figma、AirPlay 以及 macOS 的 .app/System/Library 守护进程。使用 -a 参数可显示这些进程。

可选列:port、process、pid、type、url、cpu、mem、threads、uptime、state、connections、health、latency、container、image、containerport、compose、project、user、bind、ip

PixPin_2026-05-26_16-16-26.png

检查端口

sonar info 3000

显示端口完整信息,包括命令、用户、绑定地址、CPU/内存/线程、运行时长、健康检查结果及 Docker 相关详情。

PixPin_2026-05-26_16-21-56.png

终止进程

# 按端口杀进程
sonar kill 3000                   # 发送 SIGTERM 信号终止进程
sonar kill 3000 -f                # 强制终止进程(SIGKILL)

# 批量杀进程
sonar kill-all --filter docker    # 停止所有 Docker 容器
sonar kill-all --project my-app   # 停止指定 Compose 项目
sonar kill-all --filter user -y   # 跳过确认提示

Docker 容器会通过 docker stop 停止,而不是直接发送进程信号。

查看日志

sonar logs 3000

对于 Docker 容器,会执行 docker logs -f;对于本地进程,会通过 lsof 自动发现并跟踪日志文件,必要时回退到 macOS log stream 或 Linux /proc/<pid>/fd

PixPin_2026-05-26_16-29-51.png

高级使用

连接到服务

sonar attach 3000                 # 进入 Docker 容器 shell,或建立 TCP 连接
sonar attach 3000 --shell bash    # 使用指定 shell(如 bash)

如果不是 Docker 容器,则尝试 TCP 连接。

PixPin_2026-05-26_16-34-07.png

实时监控

sonar watch                                # 每 2 秒轮询一次,并显示变化
sonar watch --stats                        # 实时显示资源占用(类似 docker stats)
sonar watch -i 500ms                       # 更快的轮询间隔
sonar watch --notify                       # 端口上下线时发送桌面通知
sonar watch --host user@server             # 监控远程机器

--notify 很有用,后台运行 sonar watch --notify 后,服务启动或异常退出时会自动弹出桌面通知。

PixPin_2026-05-26_16-39-07.png

依赖关系图

sonar graph           # 显示服务之间的通信关系
sonar graph --json    # 以结构化 JSON 格式输出
sonar graph --dot     # 以 Graphviz DOT 格式输出

显示服务间的实际链接关系,例如前端连接后端、后端连接 PostgreSQL。支持 JSON 和 Graphviz DOT 格式输出,可直观看到运行时真实的服务调用链路。

PixPin_2026-05-26_16-44-13.png

项目端口快照

sonar profile create my-app   # 保存当前端口快照
sonar profile list            # 列出所有已保存配置
sonar profile show my-app     # 查看配置详情
sonar up my-app               # 检查配置中的端口是否正在运行
sonar down my-app             # 停止配置中的所有端口

Profile 可以保存项目的端口状态,例如 PostgreSQL、Redis、前后端等服务。创建后,通过 sonar up my-app 一键检查未启动服务,sonar down my-app 一键关闭整套环境。

等待端口

sonar wait 5432                   # 等待端口开始接受连接
sonar wait 5432 3000 6379         # 等待多个端口就绪
sonar wait 5432 --timeout 30s     # 30 秒后超时失败
sonar wait 5432 --http            # 等待 HTTP 200 响应,而不只是 TCP 可连接
sonar wait 5432 --http=/health    # 检查指定 HTTP 接口
sonar wait 5432 -i 500ms          # 自定义轮询间隔
sonar wait 5432 -q                # 静默模式,仅返回退出码(适用于脚本)

适合在 docker compose up -d 等脚本中等待服务启动。--http 会等待接口真正返回 HTTP 200-399,而不只是端口可连接,可避免服务“端口已开但还没准备好”的情况;也可以通过 --http=/health 检查指定健康接口。

PixPin_2026-05-26_16-51-39.png

端口映射

sonar map 6873 3002

把 6873 端口转发到 3002,实现轻量级端口映射。

查找空闲端口

sonar next              # 从 3000 开始查找下一个可用端口
sonar next 8000         # 从 8000 开始查找下一个可用端口
sonar next 3000-3100    # 在指定范围内查找可用端口
sonar next -n 3         # 查找 3 个连续可用端口
sonar next --json       # 以 JSON 格式输出

适合开发脚本、临时服务或自动分配端口场景。

其它

sonar open 3000     # 在浏览器中打开服务
sonar tray          # 菜单栏应用,实时显示状态(macOS)
sonar --no-color    # 禁用彩色输出(同时支持 NO_COLOR 环境变量)

配置(可选)

sonar 支持从 ~/.config/sonar/config.yaml 读取默认配置;配置文件是可选的,未提供时会使用内置默认值。命令行参数始终优先于配置文件。

sonar config init       # 生成带注释的配置模板
sonar config path       # 显示配置文件路径
sonar config edit       # 使用 $EDITOR 打开配置文件

配置示例:

list:
  columns: [port, process, container, image, containerport, url]  # 默认显示列
  sort: port            # 排序方式:port | pid | name | type
  filter: ""            # 过滤类型:docker | user | system | ""(全部)
  all: false            # 默认不显示桌面应用
color: true             # 是否启用彩色输出
services:               # 自定义端口服务名称
  9000: php-fpm
  5050: my-dashboard

最后总结

如果你经常和 Docker、Compose、多服务开发环境打交道,sonar 基本可以替代大部分 lsof、netstat、docker ps 的日常排查工作。

目录
相关文章
|
1天前
|
人工智能 分布式计算 安全
阿里云大数据 AI 平台 Skills 合集
阿里云大数据 AI 平台 Agent Skills(简称 Skills)是阿里云大数据 AI 平台官方提供的 AI Agent 技能发现与安装平台,为 Agent 提供安全、可靠的云资源操作能力,本文汇总阿里云大数据 AI 平台 Skills,帮助用户快速导航。
|
1天前
|
人工智能 编解码 安全
一站式AI视频翻译的技术架构:ASR→NMT→TTS→字幕压制的全链路设计
本文提出一套可落地的AI视频翻译系统架构,强调构建稳定、可追踪的数据管线而非简单串联模型。全链路分为输入、ASR、说话人分离、NMT、TTS、后处理和任务编排7层,以带时间轴/角色/状态的segment为核心数据结构,确保时间轴精准、声音不串、成品直发,专为出海、课程本地化与短剧翻译等场景优化。
|
1天前
|
机器学习/深度学习 人工智能 算法
图解人工智能的数学基础(高数)
本文系统讲解微积分核心概念:数列与递推、极限(含无穷小/大)、导数(含中值定理、泰勒公式)、积分(不定/定/变上限/反常)及微分方程,并延伸至多元函数、偏导数、链式法则与二重积分,结合Sigmoid函数、药物衰减等实例及SymPy代码演示,突出其在AI与工程中的应用基础。
43 5
|
1天前
|
JSON 缓存 人工智能
【剪映小助手】媒体处理接口
CapCut Mate 是基于 FastAPI 的剪映自动化媒体处理接口,支持视频、音频、图片、贴纸的批量添加与轨道管理,提供草稿创建/保存/获取及标准化错误处理,助力高效、可控的AI视频编辑流程。(239字)
|
1天前
|
人工智能 API 开发工具
阿里云百炼coding plan优惠没了吗?在哪订阅?售罄了什么时候补货?解决方法来了
阿里云百炼Coding Plan是面向AI编程的固定月费订阅服务,现仅提供Pro高级套餐(200元/月),含9万次请求额度,支持Qwen3.5-Plus、Kimi-k2.5等多模态模型。首月优惠已结束,每日9:30限量抢购,不支持退款。阿里云CodingPlan官方订阅链接:https://t.aliyun.com/U/G7pldC
|
1天前
|
Python
Python之代码片段-日志功能
这是一段Python日志配置代码,实现分级日志输出:控制台仅显示INFO及以上级别,文件按天轮转并保留7天,支持DEBUG级全记录。附带简洁调用示例,便于快速集成到服务项目中。
|
1天前
|
人工智能 运维 Cloud Native
其他活动 | PPT合集下载
云原生讲师大会分享材料
59 5
|
1天前
|
SQL 人工智能 安全
AI智能问数实现:Text2SQL与图表生成全链路解析
本文详解向量空间JBoltAI平台智能问数(DataChat)技术实践:覆盖Text2SQL、五层SQL安全校验(AST解析+fail-closed)、多源并发查询、两阶段图表生成(ECharts)及四层防死循环机制,实现自然语言查数据、出图表的稳定生产落地。
|
1天前
|
人工智能 安全 PHP
周一上线|Claude Code 有了避坑指南,GitHub 内部仓库遭未授权访问
本周AI/开发者圈“工具与玩具齐飞”:Cursor、Warp、Codex、Qwen等密集升级;Google开源Agent Runtime,Perplexity发布安全扫描器;老式钻床变游戏手柄、耳机成陀螺发射器、3D猫追鼠标等创意玩出花。
周一上线|Claude Code 有了避坑指南,GitHub 内部仓库遭未授权访问
|
1天前
|
人工智能 缓存 安全
Qwen3.7 Max——阿里云百炼发布面向智能体时代的新一代旗舰模型,免费领100万Tokens体验!
阿里云百炼重磅发布Qwen3.7 Max——面向智能体时代的新一代旗舰大模型,支持100万tokens超长上下文、30K RPM高并发,具备卓越编程能力与MCP集成能力,可高效驱动复杂任务自主执行。现推理后付费限时5折,新用户免费试用100万Tokens。快速体验:https://t.aliyun.com/U/fPVHqY