witr 的核心价值在于,它将 pslsofsssystemctl 等多个命令的信息关联起来,直接呈现一个进程的完整因果链(例如,systemd → pm2 → node),让您一眼就能理解系统状态。它提供简洁的 CLI 输出和交互式 TUI(终端用户界面),并支持 JSON 输出,适用于脚本和自动化场景。

📥 安装 witr

witr 是一个单一静态二进制文件,支持 Linux、macOS、Windows 和 FreeBSD。您可以通过多种方式安装。

方式一:快速安装脚本

这是最快捷的方式,适合所有平台。

  • Unix (Linux, macOS, FreeBSD):在终端中执行以下命令。脚本会自动检测系统架构,下载最新版本并安装到 /usr/local/bin

    1
    curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash
  • Windows (PowerShell):在 PowerShell 中执行以下命令。脚本会下载并安装到 %LocalAppData%\witr\bin,并自动将其添加到用户 PATH 环境变量中。

    1
    irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex

方式二:使用包管理器(推荐)

如果您习惯使用包管理器,可以更方便地安装和更新。

操作系统/生态系统 包管理器命令
Debian/Ubuntu sudo apt install witr
macOS (Homebrew) brew install witr
macOS (MacPorts) sudo port install witr
Arch Linux (AUR) yay -S witr-bin (或使用 paru)
Windows (Winget) winget install -e --id PranshuParmar.witr
Windows (Chocolatey) choco install witr
Windows (Scoop) scoop install main/witr
跨平台 (Conda) conda install -c conda-forge witr
跨平台 (NPM) npm install -g @pranshuparmar/witr
FreeBSD pkg install witr

注意:通过官方仓库安装的版本可能落后于 GitHub 最新版。如需最新功能,可使用安装脚本或从 Releases 页面下载。

方式三:从源码安装 (Go)

适合 Go 开发者。

1
go install github.com/pranshuparmar/witr/cmd/witr@latest

请确保 $GOPATH/bin$HOME/go/bin 在您的 PATH 中。

验证安装

安装完成后,运行以下命令验证:

1
witr --version

启用 Shell 自动补全(可选):

1
2
3
4
5
6
# Bash
echo 'eval "$(witr completion bash)"' >> ~/.bashrc
# Zsh
echo 'eval "$(witr completion zsh)"' >> ~/.zshrc
# PowerShell
witr completion powershell | Out-String | Invoke-Expression

🚀 核心用法与示例

witr 的基本用法非常简单。在终端中输入 witr <进程名> 即可。

查询运行中的进程

1
2
# 查询名为 'node' 的进程
witr node

输出示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Target      : node

Process : node (pid 14233)
User : pm2
Command : node index.js
Started : 2 days ago (Mon 2025-02-02 11:42:10 +05:30)

Why It Exists :
systemd (pid 1) → pm2 (pid 5034) → node (pid 14233)

Source : pm2

Working Dir : /opt/apps/expense-manager
Git Repo : expense-manager (main)
Sockets : 127.0.0.1:5001 (TCP | LISTENING)

按端口查询

想知道哪个程序占用了 3000 端口?

1
witr --port 3000

按文件查询

想知道哪个进程锁定了某个文件?

1
witr --file /var/lib/dpkg/lock

按容器查询

查询名为 redis 的容器(自动搜索 Docker、Podman 等运行时):

1
witr --container redis

同时查询多个目标

可以混合使用不同参数,结果将按顺序显示。

1
witr nginx --port 5432 --pid 1234

简短输出(仅显示因果链)

如果只想快速看到进程来源,可以使用 --short--tree

1
2
3
4
5
6
7
8
9
10
witr --port 5000 --short
# 输出: systemd (pid 1) → PM2 v5.3.1: God (pid 1481580) → python (pid 1482060)

witr --pid 143895 --tree
# 输出树形结构:
# systemd (pid 1)
# └─ ...
# └─ node (pid 143895)
# ├─ node (pid 143930)
# └─ ...

JSON 格式输出

适合在脚本中解析和处理。

1
witr node --json

🎮 交互式 TUI 模式

直接输入 witrwitr -i 即可启动一个实时仪表板。

  • 进程 (Processes) 标签页:列出所有进程,高亮进程可查看其祖先树和详细信息。
  • 端口 (Ports) 标签页:显示所有监听端口及其所属进程。
  • 容器 (Containers) 标签页:显示所有运行中的容器(Docker, Podman 等)。
  • 文件锁 (Locks) 标签页:显示系统中的文件锁。
  • 操作:您可以在 TUI 中直接对进程发送信号(如 Kill、Terminate)或调整优先级 (renice)。
  • 交互:支持鼠标操作,颜色主题会自动适应您的终端背景。

⚙️ 关键配置与提示

  • 权限:为了获取最完整的信息(特别是系统进程),您可能需要使用 sudo 运行 witr(Windows 需以管理员身份运行)。
  • 精确匹配:默认使用子串模糊搜索。如需精确匹配进程名,使用 --exact 标志,如 witr nginx -x
  • 多个结果:如果查询匹配到多个进程,witr 会列出所有匹配项,并提示您使用 PID 进行精确查询。
  • 退出码:witr 有明确的退出码(0=成功,1=有警告,2=未找到等),便于在脚本中使用。

🧹 卸载

  • 包管理器:使用相应的卸载命令,如 brew uninstall witr
  • 脚本/手动安装
    • Unixsudo rm -f /usr/local/bin/witr /usr/local/share/man/man1/witr.1
    • WindowsRemove-Item -Recurse -Force "$env:LocalAppData\witr"

🆘 获取帮助

  • 内置帮助witr --help
  • 在线教程:项目提供了一个 浏览器中的交互式教程,让您可以在模拟环境中试用。
  • 问题反馈:如果遇到问题或有功能建议,请在 GitHub Issues 提交。