现代Linux命令行三剑客
fd, ripgrep, fzf 这三款工具通常被称为“现代Linux命令行三剑客”,它们分别解决了找文件、搜内容和选目标这三个核心痛点。
核心差异概览
| 工具 | 定位 | 替代的传统命令 | 核心优势 |
|---|---|---|---|
| fd | 找文件名 | find | 极快,默认忽略 .gitignore,语法简单 |
| ripgrep (rg) | 搜文件内容 | grep / ack | 速度世界第一,支持多种编码,正则支持极佳 |
| fzf | 模糊搜索筛选 | N/A (交互式工具) | 能够将任何列表变成可搜索的下拉菜单 |
1. fd:快速找文件
fd 旨在替代复杂的 find 命令。它默认会递归搜索并过滤掉隐藏文件和 .gitignore 中的内容。
- 使用场景:只记得文件名的一部分,想快速定位文件。
- 具体例子:
$ fd config
找所有名字里带 "config" 的文件
$ fd -g "*.js"
找js文件
$ fd -t d src
只找文件夹
$ fd -e py
按扩展名查找: 找所有 .py 脚本。
$ fd -e jpg -x rm
执行命令:找到所有图片并直接删除
$ fd --size +100m
找出磁盘中所有的大文件
$ fd --changed-within 1h
把最近一小时改过的文件全列出来
2. ripgrep (rg):极速搜内容
ripgrep 是目前公认最快的内容文本搜索工具,其处理大规模代码库的速度远超传统grep。
- 使用场景:想知道某个变量或字符串在哪个文件的哪一行。
- 具体例子:
$ rg "import"
列出包含import内容的文件和内容信息
$ rg -t py "main"
搜索python文件中main函数
$ rg -T js "config"
搜索除js文件外的所有文件中包含config的内容
$ rg main -t cpp src/
限制范围:只在 src 文件夹的 C++ 文件里搜 "main"
$ rg "error_code" -C 2
多行搜索:通过 -C 查看匹配行的上下各 2 行背景信息
$ rg -l "import"
只列出包含关键字的文件
rg 和 fzf 命令联动
$ rg -l "import" | fzf --preview 'rg -n --color=always -C 3 "import" {}'
rg搜出文件传给fzf,右边关键词高亮+上下文预览,切换左侧文件跟着切换预览
我们还可以把这个功能包装成一个函数,加入到.zshrc中
function rgf() {
rg -l "%1" | fzf --preview "rg -n --color=always -C 3 '$1' {}";
}
3. fzf:交互式模糊过滤器
fzf 不是文件工具,而是一个过滤器。它通常配合其他命令的输出使用,提供一个实时搜索的交互界面。
- 使用场景:在几千个选项里,通过“模糊匹配”选出你想要的那一个。
- 具体例子:
基本使用
$ ^ghostty
在列表中搜以ghostty开头的
$ git$
在列表中搜以git结尾的
$ vim $(fd -t f | fzf)
组合使用: 用 fd 找文件,传给 fzf 筛选,最后用 vim 打开
- 历史命令模糊搜索:按下 Ctrl + R 后,可以在列表中模糊搜索执行过的历史命令
** + Tab模糊补全,kill补进程、ssh补主机、vim补文件- 任何命令需要文件路径,写个$(fzf)弹出来搜,选中自动替换。比如: bat $(fzf)
- fzf接管道万物皆可搜,git分支搜完直接切换、进程搜完直接杀掉
$ git branch | fzf | xargs git checkout
把git分支列表传给fzf,选择后直接checkout分支
还可以把这个命令定义成alias
alias gco="git branch | fzf | xargs git checkout"
所以总结下这三个工具的使用建议:
- 如果你想找路径:用 fd
- 如果你想搜代码:用 rg
- 如果你想选东西:把输出管道给 fzf
三者联动(例如:rg "keyword" | fzf)是目前 Linux 中公认的[最佳终端工作流组合]。

浙公网安备 33010602011771号