
sonar v0.4.1
localhost पोर्ट पर सुनने वाली सेवाओं के निरीक्षण और प्रबंधन के लिए CLI उपकरण
███████╗ ██████╗ ███╗ ██╗ █████╗ ██████╗
██╔════╝██╔═══██╗████╗ ██║██╔══██╗██╔══██╗
███████╗██║ ██║██╔██╗ ██║███████║██████╔╝
╚════██║██║ ██║██║╚██╗██║██╔══██║██╔══██╗
███████║╚██████╔╝██║ ╚████║██║ ██║██║ ██║
╚══════╝ ╚═════╝ ╚═╝ ╚═══╝╚═╝ ╚═╝╚═╝ ╚═╝
जानें कि आपकी मशीन पर क्या चल रहा है।
मैं हर बार जब कोई पोर्ट पहले से लिया हुआ होता था तो lsof -iTCP -sTCP:LISTEN | grep ... चलाने से थक गया था, और फिर यह पता लगाने में एक और मिनट बिताना कि यह कोई Docker कंटेनर है या किसी अन्य वर्कट्री से कोई अनाथ डेव सर्वर। इसलिए मैंने sonar बनाया।
यह लोकलहोस्ट पर सुनने वाली हर चीज़ दिखाता है, जिसमें Docker कंटेनर नाम, Compose प्रोजेक्ट, संसाधन उपयोग और क्लिक करने योग्य URL शामिल हैं। आप प्रक्रियाओं को समाप्त कर सकते हैं, लॉग देख सकते हैं, कंटेनरों में शेल ले सकते हैं, और भी बहुत कुछ — सब कुछ पोर्ट नंबर से।
$ sonar list
PORT PROCESS CONTAINER IMAGE CPORT URL
1780 proxy (traefik:3.0) my-app-proxy-1 traefik:3.0 80 http://localhost:1780
3000 next-server (v16.1.6) http://localhost:3000
5432 db (postgres:17) my-app-db-1 postgres:17 5432 http://localhost:5432
6873 frontend (frontend:latest) my-app-frontend-1 frontend:latest 5173 http://localhost:6873
9700 backend (backend:latest) my-app-backend-1 backend:latest 8000 http://localhost:9700
5 ports (4 docker, 1 user)
इंस्टॉल करें
Homebrew (macOS / Linux)
brew install raskrebs/sonar/sonar
macOS पर यह sonar-tray मेन्यू बार ऐप भी इंस्टॉल करता है।
इंस्टॉल स्क्रिप्ट
curl -sfL https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.sh | bash
नवीनतम बाइनरी को ~/.local/bin में डाउनलोड करता है और यदि आवश्यक हो तो आपके PATH में जोड़ता है। अपना टर्मिनल पुनरारंभ करें या source ~/.zshrc चलाएँ।
Windows पर (PowerShell):
irm https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.ps1 | iex
कस्टम इंस्टॉल स्थान:
curl -sfL https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.sh | SONAR_INSTALL_DIR=/usr/local/bin bash
किसी विशिष्ट संस्करण को इंस्टॉल करें:
curl -sfL https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.sh | SONAR_VERSION=vX.Y.Z bash
$env:SONAR_VERSION="vX.Y.Z"; irm https://raw.githubusercontent.com/raskrebs/sonar/main/scripts/install.ps1 | iex
Go का उपयोग करना
go install github.com/raskrebs/sonar@latest
नोट:
go installकेवल CLI इंस्टॉल करता है। मेन्यू बार ट्रे ऐप (sonar tray) एक मूल Swift बाइनरी है और इसे अलग से बनाया जाना चाहिए — नीचे Tray app देखें।
शेल कम्प्लीशन (टैब-कम्प्लीट पोर्ट नंबर):
sonar completion zsh > "${fpath[1]}/_sonar" # zsh
sonar completion bash > /etc/bash_completion.d/sonar # bash
sonar completion fish | source # fish
उपयोग
पोर्ट सूचीबद्ध करें
sonar list # show all ports
sonar list --stats # include CPU, memory, state, uptime
sonar list --filter docker # only Docker ports
sonar list --sort name # sort by process name
sonar list --json # JSON output
sonar list -a # include desktop apps
sonar list -c port,cpu,mem,uptime,state # custom columns
sonar list --health # run HTTP health checks
sonar list --host user@server # scan a remote machine via SSH
डिफ़ॉल्ट रूप से, sonar डेस्कटॉप ऐप्स और सिस्टम सेवाओं को छिपाता है जो TCP पोर्ट पर सुनते हैं लेकिन विकास के लिए प्रासंगिक नहीं हैं — जैसे Figma, Discord, Spotify, ControlCenter, 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
किसी पोर्ट का निरीक्षण करें
sonar info 3000
पोर्ट के बारे में सब कुछ दिखाता है: पूर्ण कमांड, उपयोगकर्ता, बाइंड पता, CPU/मेमोरी/थ्रेड्स, अपटाइम, स्वास्थ्य जांच परिणाम, और यदि लागू हो तो Docker विवरण।
प्रक्रियाएँ समाप्त करें
sonar kill 3000 # SIGTERM
sonar kill 3000 -f # SIGKILL
sonar kill-all --filter docker # stop all Docker containers
sonar kill-all --project my-app # stop a Compose project
sonar kill-all --filter user -y # skip confirmation
Docker कंटेनरों को सिग्नल भेजने के बजाय docker stop से रोका जाता है।
लॉग देखें
sonar logs 3000
Docker कंटेनरों के लिए, docker logs -f चलाता है। मूल प्रक्रियाओं के लिए, lsof के माध्यम से लॉग फ़ाइलों का पता लगाता है और उन्हें टेल करता है। macOS log stream या Linux /proc/<pid>/fd पर वापस आता है।
किसी सेवा से जुड़ें
sonar attach 3000 # Docker कंटेनर में शेल, या TCP कनेक्ट
sonar attach 3000 --shell bash # विशिष्ट शेल
परिवर्तनों पर नज़र रखें
sonar watch # हर 2 सेकंड पोल करें, अंतर दिखाएं
sonar watch --stats # लाइव संसाधन आँकड़े (जैसे docker stats)
sonar watch -i 500ms # तेज़ पोलिंग
sonar watch --notify # पोर्ट ऊपर/नीचे जाने पर डेस्कटॉप सूचनाएँ
sonar watch --host user@server # दूरस्थ मशीन पर नज़र रखें
निर्भरता ग्राफ
sonar graph # दिखाएं कि कौन सी सेवाएँ एक-दूसरे से बात करती हैं
sonar graph --json # संरचित आउटपुट
sonar graph --dot # Graphviz DOT फ़ॉर्मेट
सुनने वाले पोर्ट्स के बीच स्थापित कनेक्शन दिखाता है (जैसे आपका बैकएंड पोस्टग्रेस से जुड़ रहा है)।
प्रोफ़ाइल्स
किसी प्रोजेक्ट के लिए अपेक्षित पोर्ट का एक सेट सहेजें, फिर जाँचें कि क्या वे सभी चालू हैं या उन्हें बंद करें:
sonar profile create my-app # वर्तमान पोर्ट का स्नैपशॉट बनाएं
sonar profile list # सहेजी गई प्रोफ़ाइलों की सूची
sonar profile show my-app # प्रोफ़ाइल विवरण दिखाएं
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 # एक विशिष्ट एंडपॉइंट जांचें
sonar wait 5432 -i 500ms # कस्टम पोलिंग अंतराल
sonar wait 5432 -q # कोई आउटपुट नहीं, सिर्फ एग्जिट कोड (स्क्रिप्ट्स के लिए)
docker compose up -d या पृष्ठभूमि सेवाओं के आसपास स्क्रिप्टिंग के लिए उपयोगी। --http फ़्लैग वास्तविक HTTP 200-399 प्रतिक्रिया की प्रतीक्षा करता है, सिर्फ TCP सॉकेट की नहीं, जो उन सेवाओं को पकड़ता है जो वास्तव में तैयार होने से पहले कनेक्शन स्वीकार करती हैं। किसी विशिष्ट एंडपॉइंट की जाँच करने के लिए --http=/health का उपयोग करें। निकास कोड: 0 (तैयार), 1 (टाइमआउट), 2 (बाधित)।
docker compose up -d
sonar wait 5432 3000 --timeout 60s && npm run migrate && npm run test
पोर्ट मैपिंग
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 env को भी मानता है)
--stats फ़्लैग प्रति-प्रक्रिया और प्रति-कंटेनर संसाधन उपयोग प्राप्त करता है। Docker कंटेनरों के लिए, यह सटीक प्रति-कंटेनर मीट्रिक के लिए Docker Engine API का उपयोग करता है। --stats के बिना, sonar तुरंत लौटता है।
कॉन्फ़िगरेशन
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)
all: false # include desktop apps by default
color: true # set false to disable colored output
services: # label custom/unknown ports
9000: php-fpm
5050: my-dashboard
अमान्य मान चेतावनी के साथ अनदेखा किए जाते हैं; sonar डिफ़ॉल्ट के साथ जारी रहता है।
ट्रे ऐप
मेन्यू बार ट्रे ऐप (केवल macOS) एक मूल Swift बाइनरी है जो आपके मेन्यू बार में लाइव पोर्ट आँकड़े दिखाता है। यदि आपने इंस्टॉल स्क्रिप्ट या GitHub रिलीज़ के माध्यम से sonar इंस्टॉल किया है, तो ट्रे बाइनरी (sonar-tray) स्वचालित रूप से शामिल है।
यदि आपने go install के माध्यम से इंस्टॉल किया है, तो इसे मैन्युअल रूप से बनाएँ:
swiftc -O -o sonar-tray tray/SonarTray.swift -target arm64-apple-macos13
फिर sonar-tray को अपने $PATH पर कहीं ले जाएँ और चलाएँ:
sonar tray
समर्थित प्लेटफ़ॉर्म
- macOS (uses
lsof) - Linux (uses
ss) - Windows (uses
netstat)
योगदानकर्ता
sonar में योगदान देने वाले सभी लोगों का धन्यवाद!