工作这些年,我待过不少产品型的公司做后端开发。从早期的创业团队,到后来每天要处理数百万请求的系统,我观察到一个有趣的现象:真正决定你日常工作效率上限的,往往不是选了什么炫酷的框架,或者用了哪家云厂商的服务。而是你每天打交道的命令行工具。
当凌晨3点的告警电话把你叫醒时,你眼前的这个终端,要么是你的“驾驶舱”,让你能快速定位问题;要么就是个“瓶颈”,让你在混乱的输出和复杂的命令里浪费时间。这篇文章不谈什么“10倍效率”的神话,咱们聊点更实际的:如何用对工具,来减少重复操作、减少上下文切换、减少认知负担。
下面这10个CLI工具,就是我日常工作中离不开的“效率加速器”。
什么样的CLI工具才算得上“专业”?
在我看来,一个优秀的、能称得上“专业级”的命令行工具,通常具备以下四个特征:
1. 可组合性 (Composability)
它应该能很好地通过管道 (|)、过滤器或者退出码与其他工具协同工作,这是经典的 Unix 哲学。
2. 人体工程学 (Ergonomics)
设计上要尽量减少你的击键次数、过滤掉无用的噪音输出,并且避免让你在不同界面间频繁切换。
3. 可复用性 (Repeatability)
工具本身应该易于编写脚本,并且其使用模式方便在团队内共享和固化,形成统一的最佳实践。
4. 对可观测性友好 (Observability-friendly)
在处理日志、调试API、查看git diff或进行本地排错时,它能提供清晰、结构化的输出,而不是一堆需要你费力解析的文本。
1. HTTPie —— API调试的舒适之选
为什么用它?因为它让调试API变得异常直观,输出格式对人类极其友好。
看看这个例子,如何获取令牌并用其查询用户:
TOKEN=$(http -b POST https://api.example.com/login username=dev password=secret | jq -r .token)
http GET https://api.example.com/users Authorization:"Bearer $TOKEN" \
| jq '.data[] | {id, email}'
专业玩法:
- 配合
jq 直接处理返回的JSON数据。
- 配合
less -R 进行分页浏览,保留颜色输出。
- 配合
grc (generic colourizer) 让输出更加五彩斑斓。
替代品:xh, curlie
2. jq —— JSON处理的神器
在现代后端系统中,JSON无处不在——API响应、结构化日志、Kubernetes的配置清单,各种配置文件里都能见到它。jq就是为处理它们而生的。
例如,从JSON格式的日志中快速过滤出错误级别的事件:
jq -r '.events[]
| select(.level=="error")
| [.timestamp, .msg]
| @tsv' < app.log.json
建议:维护一个自己的 ~/.jq 文件,把常用的过滤器函数放进去,随取随用。
3. ripgrep (rg) —— 最快的代码搜索引擎
当你需要快速回答“这个函数在哪儿被调用了?”或者“这个报错信息源自哪行代码?”时,ripgrep 通常是能找到答案的最快途径。
示例:在项目中搜索CreateUserCommand,并智能忽略.git和node_modules目录:
rg --hidden -g '!.git' -g '!node_modules' 'CreateUserCommand'
专业技巧:配置 fzf(下面会介绍)使用 rg 作为其默认的文件搜索源,强强联合。
4. fzf —— 模糊查找一切
fzf 是一个通用的模糊查找器,几乎能搜索任何列表:文件、Git分支、命令历史、甚至进程列表。
基础用法,搜索文件并用VS Code打开:
fzf | xargs -r code
强烈推荐绑定:将 Ctrl + R 绑定给 fzf 来搜索历史命令,用过就回不去了。
5. fd —— 更人性化的 find 命令
fd 是传统 find 命令的一个现代化、更快速的替代品。它的语法更直观,默认设置更智能(例如自动忽略.gitignore中的文件)。
示例:找到所有.proto文件并用clang-format格式化:
fd -e proto | xargs -r clang-format -i
常见组合:fd + xargs, 或者 fd + parallel 进行并行处理。
6. bat —— 带了“翅膀”的 cat
bat 可以看作是 cat 命令的超集,它提供了语法高亮、行号显示,并且集成了Git,能显示文件的修改状态。
用bat来优雅地查看git diff的输出:
git diff | bat --paging=always
建议:直接将 bat 设置为你的默认分页器 (PAGER)。
7. zoxide —— 智能目录跳转
仔细想想,cd 可能是我们最常用的命令之一。zoxide 会学习你访问目录的习惯,实现智能跳转。
例如,无论你在哪个目录,只需输入:
z my-api
它很可能就会带你跳到 ~/work/services/my-api。导航效率直线上升。
8. delta —— 赏心悦目的 Git Diff 查看器
默认的 git diff 输出对于阅读复杂变更来说并不友好。delta 提供了并排视图 (side-by-side)、语法高亮和行号,让代码审查变得轻松。
配置你的 ~/.gitconfig,让所有diff输出都通过delta:
[pager]
diff = delta
log = delta
reflog = delta
9. gh —— GitHub 命令行工具
有了 gh,你可以在不离开终端的情况下完成大部分GitHub操作,比如创建拉取请求 (PR):
gh pr create \
--title "Add Redis cache layer" \
--body-file .github/pr_templates/cache.md \
--label "performance" \
--reviewer alice,bob
除此之外,评审PR、查看CI状态、进行Cherry-pick等操作也都能轻松完成,极大优化了基于GitHub的工作流。
10. just —— 优雅的现代任务运行器
很多团队的日常是:在Slack或文档里复制粘贴一长串命令来启动服务、运行迁移。just 可以将这些流程标准化、文档化。
一个简单的 justfile 示例:
bootstrap:
./scripts/bootstrap.sh
db-up:
docker compose up -d db redis
serve:
RUST_LOG=info ./target/debug/api
然后,任何团队成员只需要运行 just serve 就能启动服务。共享justfile后,团队能迅速形成统一的“肌肉记忆”。
真正的威力在于“管道组合”
单个工具的强大只是基础,真正能产生质变的是将它们通过Unix管道组合起来,形成高效的工作流。
快速排查生产环境问题
stern -n prod api-deployment \
| jq -r 'select(.level=="error") | [.ts, .msg] | @tsv' \
| rg -n "timeout|429|deadlock"
根据请求ID追踪全链路日志
export CID="2f6b0d4c..."
rg "$CID" ~/work/services/*/logs/*.json \
| fzf
调试API并同时保存原始结果
http GET :8080/v1/report start==2025-10-01 end==2025-10-23 \
| tee /tmp/report.json \
| jq '.summary'
安全地进行批量代码重构
fd -e go 'OldClient' | xargs sed -i 's/OldClient/NewClient/g'
rg 'OldClient' # 再次确认是否替换干净
推荐配置片段 (Dotfiles)
让你的工具组合发挥1+1>2的效果。
让 fzf 使用 ripgrep 作为搜索引擎:
export FZF_DEFAULT_COMMAND='rg --files --hidden -g "!.git"'
将 bat 设为默认分页器:
export PAGER="bat"
export BAT_PAGER="less -R"
配置 ripgrep 的全局忽略规则 (~/.ripgreprc):
--hidden
-g !.git
-g !node_modules
-g !dist
初始化 zoxide (以bash为例):
eval "$(zoxide init bash)"
一键安装
macOS (Homebrew):
brew install httpie jq ripgrep fzf fd bat zoxide git-delta gh just
Ubuntu/Debian:
sudo apt install httpie jq ripgrep fzf fd-find bat zoxide git-delta gh
# just 可能需要通过其他方式安装,如 `cargo install just`
其他值得关注的好工具
eza —— ls 命令的现代化替代品,功能更丰富。
htop / btm —— 交互式进程/系统资源监视器。
pgcli / mycli —— 为PostgreSQL和MySQL设计的智能命令行客户端,带自动补全和高亮。
stern —— 用于追踪多个Kubernetes Pod和容器日志的神器。
watchexec —— 监视文件变化并自动执行指定命令,本地开发的利器。
工欲善其事,必先利其器。花点时间配置好你的命令行环境,它将成为你最高效、最可靠的伙伴。如果你也在寻找一个能交流这些“利器”使用心得的地方,不妨来云栈社区逛逛,这里聚集了许多热爱分享的开发者。