witr: CLI truy vết process, port và container
witr trả lời một câu hỏi mà ps, lsof, và docker ps không trả lời được: vì sao process này thực sự đang chạy, và điều gì đã đưa nó vào đây. Hãy dùng witr khi bạn đang truy tìm một port bí ẩn hoặc một container không chịu tắt và muốn có một chuỗi nhân quả duy nhất thay vì ghép thủ công kết quả từ bốn công cụ khác nhau. Bỏ qua nó nếu bạn đã biết chính xác điều gì khởi động dịch vụ duy nhất, đơn giản mà bạn đang chạy.
Thách Thức Về Tính Nhân Quả Của Hệ Thống
Khoảng trống mà witr lấp đầy là: ps, top, lsof, ss, systemctl, và docker ps đều chỉ cho thấy trạng thái, không cho thấy nguyên nhân — bạn có một PID hay một socket đang lắng nghe, nhưng phải tự đối chiếu thủ công giữa các systemd unit, shell cha, session tmux, và container runtime để hiểu ai thực sự đã khởi động nó và vì sao nó vẫn đang chạy. witr coi đây là một câu hỏi duy nhất và dựng chuỗi nhân quả (supervisor, container, shell, hoặc session) chỉ trong một lệnh thay vì năm lệnh.
witr Làm Gì
witr là một công cụ command-line kiêm terminal UI viết bằng Go, giúp truy vết một process đang chạy, một port đang mở, một container, hoặc một file đang bị giữ, về đúng chuỗi hệ thống đã khởi động nó. witr hoạt động từ các truy vấn theo process, port, file, hoặc container, hoặc qua một TUI tương tác với bốn tab bao phủ process, port, container, và file lock, và có thể in kết quả dưới dạng text dễ đọc hoặc JSON máy đọc được.
Các Khả Năng Và Chế Độ Chính
- ✓Một lệnh duy nhất trả lời 'vì sao cái này đang chạy' bằng cách dựng chuỗi nhân quả — README gọi đây là giá trị cốt lõi của công cụ — thay vì chỉ liệt kê trạng thái từ các công cụ riêng lẻ.
- ✓Bốn chế độ truy vấn có thể lặp lại và kết hợp trong cùng một lệnh: --pid, --port, --file, và --container, cộng với tìm theo tên process ở dạng positional (mặc định khớp theo substring, dùng --exact để khớp chính xác).
- ✓Một TUI tương tác bốn tab (Processes, Ports, Containers, Locks) với side panel trực tiếp, hỗ trợ chuột, cột có thể sort/filter, và theme sáng/tối tự thích ứng.
- ✓Nhận diện container trên tám runtime chỉ trong một truy vấn: Docker, Podman, nerdctl, K8s/crictl, Incus, LXC, LXD, và FreeBSD jails, khớp theo tên, image, command, hoặc compose project/service label.
- ✓Thao tác trên process ngay trong TUI — gửi signal Kill, Terminate, Pause, Resume, hoặc renice một process — trên hệ Unix.
- ✓Output --json cùng sáu exit code (0-5) có ý nghĩa cụ thể, được thiết kế cho script, CI pipeline, và các bước kiểm tra monitoring, chứ không chỉ để đọc trên terminal.
- ✓Gán nguồn gốc (source) theo kiểu best-effort, chỉ chọn một nguyên nhân chính cho mỗi process — một systemd unit kèm lịch chạy, một session SSH kèm IP từ xa, một container docker, pm2, cron, hay một session tmux/screen được phát hiện — thay vì liệt kê mọi yếu tố liên quan.
- ✓Các panel trong TUI tự làm mới theo chu kỳ thích ứng, bắt đầu ở 3 giây và giãn ra khi hệ thống đang tải nặng.
Khi Nào Nên Dùng witr
- •Tìm ra thứ gì đang chiếm một port trước khi bạn khởi động service của mình, ví dụ witr --port 5000 --short để lấy chuỗi nhân quả chỉ trong một dòng.
- •Truy nguyên nhân gốc của một container cứ restart liên tục hoặc không chịu dừng, bằng cách truy vấn theo tên, image, hoặc compose project trên các runtime Docker/Podman/K8s.
- •Ứng phó sự cố (incident response), khi bạn cần chuỗi nhân quả — chứ không chỉ một PID — để giải thích cho team vì sao một process tồn tại và ai đang supervise nó.
- •Tìm ra thứ gì đang giữ một file lock, giống ví dụ dpkg lock trong README (witr --file /var/lib/dpkg/lock).
- •Khám phá hệ thống trực tiếp qua TUI khi bạn muốn xem process, port, container, và lock cùng lúc thay vì chạy bốn lệnh riêng biệt.
- •Viết script health check hoặc CI gate dựa trên exit code và output --json của witr, thay vì parse output dạng free-text từ ps/lsof.
Bắt Đầu Với witr
witr được phân phối dưới dạng một binary tĩnh duy nhất cho Linux, macOS, FreeBSD, và Windows, không cần cài thêm runtime dependency riêng. Cách nhanh nhất là dùng install script — curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash trên Unix, hoặc irm .../install.ps1 | iex trong PowerShell trên Windows — nhưng README còn liệt kê cài qua package manager cho apt (Ubuntu 26.04+ và Debian sid trở lên), Homebrew, MacPorts, Conda/mamba/pixi, AUR (witr-bin), winget, npm (@pranshuparmar/witr), FreeBSD Ports, Chocolatey, Scoop, AOSC OS, GNU Guix, Uniget, Aqua, Brioche, và Mise, cùng các package .deb/.rpm/.apk dựng sẵn và go install github.com/pranshuparmar/witr/cmd/witr@latest để cài từ source. README ghi chú rằng các bản đóng gói qua cộng đồng (apt, các package theo dõi trên Repology) có thể chậm hơn bản release mới nhất trên GitHub.
Sử Dụng witr: Lệnh Và Kết Quả Đầu Ra
Chạy witr không kèm argument, hoặc với -i / --interactive, để mở bốn tab của TUI (Processes, Ports, Containers, Locks). Để có câu trả lời nhanh, truyền vào tên process (witr node), hoặc một target flag: --pid, --port, --file, hay --container — cả bốn đều có thể lặp lại và kết hợp trong cùng một lệnh gọi. --short chỉ in ra dòng ancestry, --tree hiển thị dưới dạng cây (giới hạn 10 process con), và --json trả về output máy đọc được cho script. --exact tắt chế độ khớp tên theo substring/fuzzy mặc định. Khi một truy vấn không rõ ràng, witr liệt kê mọi kết quả khớp kèm PID và hướng dẫn chạy lại, thay vì tự đoán bạn muốn nói đến process nào.
Điểm Mạnh
- ✓Một binary tĩnh duy nhất, bốn nền tảng (Linux, macOS, FreeBSD, Windows), không cần cài thêm runtime dependency riêng.
- ✓Có mặt trên nhiều package manager hơn phần lớn CLI tool khác — apt, Homebrew, MacPorts, Conda, AUR, winget, npm, FreeBSD Ports, Chocolatey, Scoop, và nhiều hơn nữa, theo đúng danh sách trong README.
- ✓TUI thực sự gộp bốn view riêng biệt (process, port, container, lock) kèm hỗ trợ chuột và side panel ancestry, chứ không chỉ là một wrapper mỏng quanh một trong số đó.
- ✓Hỗ trợ container trải trên tám runtime chỉ trong một truy vấn --container, từ Docker, Podman cho tới K8s/crictl và FreeBSD jails.
- ✓Sáu exit code riêng biệt cùng output --json giúp witr dùng được như một bước kiểm tra trong script, không chỉ là công cụ tương tác.
Hiểu Kết Quả Đầu Ra Và Các Trường Hợp Biên Của witr
- △Các thao tác process trong TUI — Kill, Terminate, Pause, Resume, và Renice — chỉ chạy trên Unix theo README, nên trên Windows bạn có được khả năng truy vết nhưng không điều khiển process ngay trong TUI.
- △Việc gán nguồn gốc (source) cố tình chỉ chọn một nguyên nhân chính cho mỗi process; một process có nhiều 'nghi phạm' hợp lý (chẳng hạn vừa có container runtime vừa có shell) cũng chỉ nhận được một nguồn mà witr cho là chính.
- △Output --tree giới hạn tối đa 10 process con, nên một process có rất nhiều process con sẽ không hiển thị đầy đủ 'gia đình' của nó ở chế độ --tree.
- △Nhiều thông tin chi tiết cần quyền truy cập cao hơn — README định nghĩa riêng exit code 3 cho trường hợp permission denied, nghĩa là một số truy vấn nhắm vào process của user khác sẽ trả về thông tin không đầy đủ nếu không chạy với sudo.
- △Bản cài qua package manager có thể chậm hơn bản release trên GitHub, theo đúng ghi chú của README — cả apt lẫn các package được theo dõi trên Repology nói chung có thể chưa có tính năng mới nhất, trừ khi bạn dùng install script.
Các Công Cụ Quan Sát Hệ Thống Khác
Ai Sẽ Được Lợi Từ witr?
witr đáng cài nếu bạn là developer, sysadmin, hay kỹ sư on-call thường xuyên phải hỏi 'cái gì đã khởi động cái này' về một process, port, hay container — nhất là khi bạn làm việc với Docker/Podman/Kubernetes và muốn dùng một công cụ duy nhất thay vì tự ghép output từ ps, lsof, và docker ps. Bỏ qua nó nếu hệ thống của bạn đơn giản tới mức bạn đã biết rõ nguồn gốc của mọi process, hoặc nếu bạn cần soi network traffic ở mức packet — witr giải thích nguồn gốc và ngữ cảnh, không phải traffic mạng.
Câu Hỏi Thường Gặp Về witr
witr chạy dưới dạng một binary tĩnh duy nhất trên Linux, macOS, FreeBSD, và Windows — README cung cấp install script riêng (install.sh cho Unix, install.ps1 cho PowerShell) cùng các lựa chọn package manager riêng cho từng nền tảng.
TUI của witr mở ra khi bạn chạy witr không kèm argument hoặc với -i / --interactive. Nó có bốn tab — Processes, Ports, Containers, và Locks — mỗi tab có side panel trực tiếp, cột có thể sort, hỗ trợ chuột, và theme sáng/tối tự thích ứng.
witr có thể truy vết một process theo tên hoặc PID, một port đang mở, một file đang bị giữ (như file lock), hoặc một container trên tám runtime được hỗ trợ, rồi dựng chuỗi nhân quả — supervisor, container, shell, hay session — giải thích vì sao nó tồn tại.
witr là mã nguồn mở, phát hành theo giấy phép Apache-2.0 theo file LICENSE trong repository, với source được host công khai trên GitHub.
Sáu exit code của witr (từ 0 đến 5) được thiết kế cho script, CI pipeline, và các bước kiểm tra monitoring: 0 là clean, 1 là có warning, 2 là not found, 3 là permission denied, 4 là invalid input, và 5 là internal error.
Flag --container của witr truy vết process bên trong container trên Docker, Podman, nerdctl, K8s/crictl, Incus, LXC, LXD, và FreeBSD jails, khớp theo tên container, image, command, hoặc compose project/service label.
Repo liên quan
Muốn nghe thêm một ý kiến về witr?
Hỏi một AI đọc được trang này — một cú bấm là có ngay nhận định về witr.
