命令行不是复古情怀,而是因为这些工具真的能在几秒钟里干完你手动要点半小时的活。
我承认,我曾经是那种一看到黑底白字的终端窗口就心里发怵的人。后来是因为一件事改变了:我要在一堆项目文件里找出所有写了某个废弃函数名的地方,手动翻了几十个文件之后我崩溃了,同事丢给我一行命令,两秒出结果。
从那以后我慢慢换掉了一批常用的命令行工具,换的原则只有一条:它得解决一个我真实遇到过的痛点。下面这八个,是我现在几乎每天都用到的。没有一个是花架子。
🔍 ripgrep(rg):替代 grep 的搜索工具
ripgrep 是我换得最果断的一个。它的核心卖点是快——默认递归搜索,默认遵守 .gitignore,跳过二进制文件和隐藏目录,还自带正则引擎。在一个几万文件的仓库里搜关键字,它能一秒内出结果,而传统 grep -r 要几十秒。
# 在当前目录下搜所有匹配,自动忽略 .gitignore 里的文件
rg "getUserInfo"
# 只搜某种文件类型
rg -t py "import requests"
# 列出文件名而不是内容
rg -l "TODO"
安装方式:Windows 用 winget install BurntSushi.ripgrep.MSVC,macOS 用 brew install ripgrep,Linux 各大发行版仓库里都有。它已经被很多编辑器内置(VS Code 的搜索底层就是类似思路),但在终端里直接用它依然是最快的用法。
📁 fd:比 find 好记一百倍
find 的语法我永远记不住,每次都要查手册。fd 的设计哲学就是「把最常见的用法变成默认行为」:默认递归、默认忽略隐藏文件和 gitignore、默认大小写不敏感(智能判断)。
# 找所有名为 config 的文件
fd config
# 只找 .log 结尾的
fd -e log
# 找到后直接执行命令
fd -e jpg -x convert {} {.}.webp
最后那个 -x 参数是我最常用的——批量转换图片格式、批量压缩、批量重命名,一行搞定,不用写 for 循环。fd 用 Rust 写成,速度和 ripgrep 是一个级别。
🎯 fzf:模糊查找,改变工作流
如果要我只留一个工具,我会选 fzf。它本身只是个「模糊筛选器」,接收一个列表,让你边打字边缩小范围。但它真正的威力在于能粘到任何地方。
# 在当前目录里模糊找文件并用编辑器打开
vim $(fzf)
# 从历史命令里搜索并执行
Ctrl + R
# 切换 git 分支
git checkout $(git branch | fzf)
装上 fzf 之后,Ctrl + R 搜索历史命令、Ctrl + T 插入文件路径这两个快捷键会彻底改变你的手感。以前翻历史命令要按十几次上箭头,现在是打几个字母直接命中。它的价值不是「省时间」,而是让你愿意在命令行里做更多事。
📖 bat:带语法高亮的 cat
cat 的问题是你打开一个几百行的配置文件,满屏都是灰白字,根本不知道读到哪了。bat 解决了这个:语法高亮、行号、Git 修改标记(哪几行是你改过的)、非打印字符可视化,还自动分页。
# 查看文件,带高亮和行号
bat config.json
# 去掉各种装饰,只保留纯文本(方便管道传递)
bat -p file.txt
# 和 grep 配合时自动退化成纯文本
bat file.py | grep def
它的设计考虑得很周到:检测到输出不是终端时,会自动退化成一个普通的 cat,所以不会污染管道。这个细节让我把它直接设成了 cat 的别名。
🧩 jq:处理 JSON 的瑞士军刀
只要你调过 API,就一定会遇到「返回一大坨 JSON,我只要里面某个字段」的情况。jq 就是干这个的,而且是这个领域事实上的标准工具。
# 格式化输出
curl -s api.example.com/data | jq
# 取某个字段
jq '.user.name'
# 遍历数组取字段
jq '.[] | .email'
# 过滤 + 重组
jq '[.[] | select(.age > 18) | {name, age}]'
jq 的学习曲线有点陡,那套类似管道加过滤器的语法第一次看会懵。但只需要学会 .、[]、select()、{} 这几个,你就能应付 90% 的日常需求。它不只能读,还能构造 JSON 输出,写脚本的时候特别方便。
📊 htop / btop:比 top 好看更好用的监控
top 命令信息是够的,但可读性实在不敢恭维。htop 是它的现代替代品:彩色、可横向滚动、鼠标可点击、能树形展示进程父子关系、能直接搜索和 kill 进程。
如果只看颜值和现代感,btop 更进一步,带缩放曲线图、GPU 监控、主题切换,看起来像个小型仪表盘。资源占用比 htop 略高,但在现代机器上完全无感。Windows 用户注意:这两个工具原生不跑在 Windows 上,但你在 WSL2 里可以正常使用。
🖥 tmux:终端复用,断线不丢工作
如果你需要 SSH 连服务器,tmux 几乎是必备的。它的核心价值是:会话与窗口解绑。你开的终端被关掉、网络断了,只要服务器上的 tmux 会话还在,重新连上去 tmux attach 就回到原样,正在跑的任务一个字节都没丢。
# 新建会话
tmux new -s work
# 断线后重新连接
tmux attach -t work
# 列出所有会话
tmux ls
除此之外它的分屏(一个窗口切成好几格)也很好用,可以一边看日志一边敲命令。习惯之后你会发现,没有 tmux 的 SSH 是不完整的。Windows 上可以用 WSL2 里的 tmux,或者用 Windows Terminal 配合自己的分屏功能作为替代。
🎨 delta:让 git diff 变得能看懂
默认的 git diff 输出是红绿一片,改了什么、改了哪里,全凭眼睛找。delta 把它变成左右并排的对比视图,带行号、带语法高亮,还能显示是哪个提交改的、谁改的。
# 在 ~/.gitconfig 里配置
[core]
pager = delta
[interactive]
diffFilter = delta --color-only
配好之后,所有 git diff、git log -p、git show 的输出都会自动走 delta。这是那种「用了就回不去」的工具——一旦你习惯了并排视图,再回头看默认 diff 会觉得简直不能忍。
| 工具 | 替代对象 | 核心优势 | 上手难度 |
| ripgrep | grep | 速度极快,默认忽略 gitignore | 低 |
| fd | find | 语法直观,内置批量执行 | 低 |
| fzf | 手动翻列表 | 模糊匹配,可与任何命令组合 | 低 |
| bat | cat | 语法高亮 + Git 标记 | 极低 |
| jq | 手动看 JSON | 结构化提取与重组 | 中 |
| htop / btop | top | 可读性强,可交互 | 低 |
| tmux | 裸 SSH 会话 | 断线不丢工作,多窗口 | 中 |
| delta | 默认 git diff | 并排对比 + 高亮 | 低 |
🧭 怎么开始,别一次全上
我的建议是:一次换一个,用一周。先装 bat,因为它几乎没有学习成本,装完立刻有感。然后装 ripgrep 和 fd,这两个会改变你找文件的方式。再用一周把 fzf 的快捷键练成肌肉记忆。jq 和 tmux 属于按需学习,遇到具体场景再学。
工具的意义不是让你显得厉害,而是把「懒得做」变成「顺手做」。当某件事的操作成本降到几秒钟,你才会真的去做它。
📌 小结
这八个工具有个共同点:它们都是把某一件小事做到极致,而且是可以组合的。fzf 里能调 fd 的结果,jq 能接在 curl 后面,rg 能喂给编辑器。它们不是孤立的玩具,而是一套互相咬合的工作流。
另外有个现实建议:Windows 用户如果还在用 cmd,先换成 Windows Terminal 加 PowerShell 7,或者直接上 WSL2。终端本身的体验太差的话,装再多好工具也提不起兴趣用。
从今天起,试着把 cat 换成 bat,把 grep 换成 rg。两个别名,一周之后你就不会再想回去了。
收藏夹又多了一篇好文