18 điểm bởi givvemee 2026-01-20 | 6 bình luận | Chia sẻ qua WhatsApp

Khi phát triển, chắc hẳn bạn đã phải gõ đi gõ lại những lệnh như lsof -i :3000.
"Cổng này đang bị gì dùng nhỉ?", "Hình như lúc nãy mình quên chưa tắt server đó..."

ports-cli là một công cụ CLI hiển thị gọn gàng tất cả các cổng đang mở kèm theo tên tiến trình và đường dẫn dự án.

Tính năng chính

  • Xem nhanh trong nháy mắt: Hiển thị cổng đang mở, tên tiến trình và đường dẫn dự án dưới dạng bảng
  • Nhận diện dự án Node.js: Đọc package.json để hiển thị tên dự án thực tế thay cho node
  • Lọc tiến trình của người dùng: Dùng tùy chọn -u để loại trừ tiến trình hệ thống và chỉ xem những gì bạn đã chạy
  • Tắt tiến trình: ports bye 3000 để kill ngay tiến trình đang dùng cổng đó

Cài đặt

brew tap givvemee/tap  
brew install ports-cli  

Cách dùng

ports              # hiển thị tất cả cổng đang lắng nghe  
ports -u           # chỉ các tiến trình do tôi chạy  
ports bye 3000     # tắt tiến trình dùng cổng 3000  

Ví dụ đầu ra

  
PORT     PROCESS                  PATH  
----     -------                  ----  
3000     my-app                   ~/Documents/GitHub/my-app  
5432     postgres                 -  
8080     test-server              ~/Documents/GitHub/test-server  

Chỉ dành cho macOS, công cụ chạy nhẹ bằng Bash script và không cần phụ thuộc bổ sung nào.

Rất mong nhận được phản hồi của mọi người. :)

6 bình luận

 
channprj 2026-01-26

Ồ, có khá nhiều tính năng tiện ích nhỉ. 👍🏻

Với macOS, bạn cũng có thể kiểm tra nhanh bằng lệnh dưới đây mà không cần cài đặt thêm.
Chỉ cần thêm vào ~/.zshrc là được.

(Xin chia sẻ để tham khảo!)

alias portcheck="printf "\033[4;37m%-15s %-8s %-20s %s\033[0m\n" "COMMAND" "PID" "PORT" "DIR"; sudo lsof -iTCP -sTCP:LISTEN -n -P | awk 'NR>1 {print $2, $1, $9}' | sort -u | while read pid cmd port; do dir=$(sudo lsof -p "$pid" -a -d cwd -F n 2>/dev/null | tail -1 | cut -c2-); printf "\033[1;32m%-15s\033[0m \033[1;36m%-8s\033[0m \033[1;33m%-20s\033[0m %s\n" "$cmd" "$pid" "$port" "$dir"; done"

 
givvemee 2026-01-27

À, ra là bạn đã tạo alias portcheck để dùng như vậy. Cách này cũng hay đấy. Cảm ơn bạn!

 
channprj 2026-01-27

Do có vấn đề với dấu ngoặc kép nên mình chia sẻ lại.

alias portcheck='printf "\033[4;37m%-36s %-8s %-22s %s\033[0m\n" "COMMAND" "PID" "LISTEN" "CWD"; sudo lsof -nP -iTCP -sTCP:LISTEN -F pcn 2>/dev/null | awk '"'"'BEGIN{pid=cmd=name=""}/^p/{pid=substr($0,2)}/^c/{cmd=substr($0,2)}/^n/{name=substr($0,2);if(pid&&cmd&&name)print pid"\t"cmd"\t"name}'"'"' | sort -u | while IFS=$'"'"'\t'"'"' read -r pid cmd name; do dir=$(sudo lsof -n -p "$pid" -a -d cwd -F n 2>/dev/null | sed -n '"'"'s/^n//p'"'"' | tail -1); [ -z "$dir" ] && dir="-"; printf "\033[1;32m%-36.36s\033[0m \033[1;36m%-8s\033[0m \033[1;33m%-22s\033[0m %s\n" "$cmd" "$pid" "$name" "$dir"; done'

 
chcv0313 2026-01-22

Tôi muốn biết điểm gì tốt hơn so với sudo netstat -tnlp.

 
channprj 2026-01-26

Dùng thử sẽ thấy nó hiển thị theo cách được sắp xếp gọn gàng hơn.
Ngoài ra còn có tính năng lọc để chỉ xem các tiến trình mà người dùng đang trực tiếp sử dụng.

 
yshrust 2026-01-21

Ồ, tôi cài thử và dùng ngay rồi, đơn giản nên rất dễ sử dụng!!
Cảm ơn nhé haha