先上结论:如果你还在用 grep -r、find、cat、ls 这些老古董,今天看完这篇换掉,你会后悔——后悔为什么不早换。
大概半年前我还在用最朴素的 grep -r 找代码、find . -name 找文件、cat 看配置。直到有一次帮朋友 debug,看他用 rg 刷刷刷就把我要翻半天的东西搜出来了,我当场破防。
然后花了一个下午,把常用工具全换了。到现在用了大半年,说句实话——回不去了,回去就是降级体验。
ripgrep(rg)—— grep 的究极体
最核心的替换,没有之一。
grep -r "pattern" . 和 rg "pattern" 的区别?这么说吧,前者像是拿扫帚扫地,后者像是用戴森吸尘器——你甚至还没反应过来它就扫完了。
rg 快的原因很简单:默认忽略 .gitignore 里的文件、跳过二进制、用 SIMD 加速。你不需要加 --exclude-dir=node_modules 这种骚操作,它本来就帮你跳过了。
我最常用的场景:
- 写 Hugo 模板找变量引用:
rg "{{.*title" content/,秒出 - 翻 nginx 配置:
rg "proxy_pass" /etc/nginx/ -l,把改过的文件全列出来 - 内存不够不想起 IDE:
rg -n "TODO\|FIXME" src/ --type-add 'code:*.{rs,go,py,js}' -t code
不夸张,自从用了 rg,我打开 vscode 的频率都降了。在终端里直接搜完就地改,省了 IDE 启动那几秒。
fd —— 比 find 好用的 find
find . -name "*.py" 这种命令我写了十年,从来没觉得有啥问题。直到我知道了 fd。
fd "\.py$" 效果一样,但默认不搜 .gitignore 的文件、输出带颜色、而且快得多。
还有一个我超爱用的骚操作:
fd -e jpg -x convert {} {.}.png
找到所有 jpg 批量转 png。find -exec 也能做,但语法太反人类了,我每次都要现场查怎么用。
bat —— 带语法高亮的 cat
cat 没问题,就是太素了。bat 本质上就是给 cat 加了个语法高亮 + 行号 + Git 修改标记(改过行前面会有 + 号)。
你可能会说"这不是和 IDE 里看一样吗",但当你 SSH 进服务器、没有 IDE 可用的时候,bat 能让你直接看到带配色的代码,那感觉就像在荒岛上捡到一瓶可乐。
核心配置:设个 export BAT_THEME="Dracula",然后 alias 把 cat 指向 bat,或者像我一样直接肌肉记忆打 bat。
eza —— 彩色版的 ls
ls -la 的问题不是功能不够,是眼睛不够用。一堆白色文件名挤在一起,要找最大的文件你得 ls -lahS,然后数零。
eza 默认带颜色和图标(如果你终端支持),文件类型一目了然。我最常用的是 eza -la --sort=size --icons,排下来找大文件比 du 还直观。
而且 eza --tree 比 tree 命令好看多了,目录结构直接彩输出。
fzf —— 模糊搜索,万物皆可 pipe
这玩意儿说实话,刚用时觉得"不就是个交互式搜索吗"。用了三天之后变成了"没有 fzf 我不会工作"。
最简单的用法:
ctrl + r # 搜历史命令,fzf 覆盖之后太爽了
但真正的玩法是把别的命令 pipe 给它:
kill -9 $(ps aux | fzf | awk '{print $2}')
弹个交互窗口,搜到进程按回车就杀了,不用记 pid。
或者找文件编辑:
nvim $(fd --type f | fzf)
交互式搜文件名,回车就打开。
我已经把它绑到我的 zsh 里了,全局搜索一切。
彩蛋:zoxide
最后提一嘴 zoxide。它不是传统命令的替代,但用了就回不去:cd 靠肌肉记忆,不靠路径。
z blog # 跳到 /opt/hugo-blog/
z conf # 跳到 /etc/nginx/
它记录你的 cd 历史,学你的行为模式,时间越长越准。我现在已经记不住绝对路径了,全靠 z 瞎跳。
总结(如果你非要的话)
这一套组合拳下来,你的终端体验大概能从"2005 年的 SSH 终端"升级到"2026 年该有的样子"。
而且这些东西都是 Rust 写的(除了 fzf 是 Go),内存占用极低——对我这种 1.9G VPS 用户来说,每一点内存都是金子。
安装方式就一句话:
apt install -y ripgrep fd-find bat eza fzf
或者用 cargo / brew,看你喜好。
如果你还在用 grep -r 和 find,今天就是你的 “AHA moment”。别问我是怎么知道的。