Linux 下载、安装 fzf v0.74.2(附安装包fzf-0.74.2-linux_amd64.tar.gz)

发布于 2026/8/6 · 1 阅读
fzf模糊查找命令行工具终端Go模糊搜索shell集成Linux开发者工具开源
fzf 是 Junegunn Choi 用 Go 编写的命令行模糊查找器,以单文件二进制无依赖运行,从 stdin 读取列表并实时模糊过滤,内置 Bash、Zsh、Fish、Vim 等 shell 集成与快捷键。

封面.png

1. fzf 简介

fzf 是韩国开发者 Junegunn Choi 用 Go 语言编写的命令行模糊查找器(fuzzy finder),自 2013 年创建以来已持续维护十余年,GitHub 上积累了约 8 万颗星标,被公认为终端用户最不可或缺的命令行工具之一。它采用 MIT 开源许可证,以单个静态编译的二进制文件分发,无任何运行时依赖。作者 Junegunn Choi 同时也是极简 Vim 插件管理器 vim-plug 的作者,其开发的 fzf.vim 插件同样广受欢迎。

fzf 要解决的,是 Linux 终端里一个很常见、又很头疼的问题:面前有一长串东西要挑选时,怎么快速挑出想要的那一个

举个例子:你想打开一个文件,但只记得名字里有 report;你想从几百条历史命令里找回上周敲过的那个部署命令;你想在几十个 docker 容器里找到名字含 db 的那个。过去只能一行行翻、靠眼睛找。而 fzf 做的事情很简单——它把这份列表展示成一个可以即时搜索的界面,你输入几个记得的关键字(哪怕记不全、顺序不对),它立刻把匹配项筛出来,回车即选中

fzf 本身不关心列表里装的是什么。你把什么数据喂给它(文件、命令历史、进程、git 提交、服务器地址……),它就在这份数据里帮你筛选。所以它被称为"终端里的搜索引擎":列表内容由你决定,筛选体验由 fzf 负责。也正因为它只管"筛选加选择"这一件事,可以和任何命令组合使用,成为日常终端操作里最常用的那块积木。

fzf 的核心特点:

  • 便携(Portable):单个二进制文件,下载即可运行,无依赖
  • 快速(Fast):针对毫秒级处理数百万条目的场景优化
  • 可编程(Programmable):基于事件驱动架构,可构建自定义终端界面与工作流
  • 开箱即用(Batteries-included):内置 Bash、Zsh、Fish、Nushell、Vim 与 Neovim 集成脚本

2. v0.74.2 版本亮点

该版本汇集了 5 位贡献者25 条 贡献。

v0.74.2 是 fzf 在 2026 年 8 月初发布的一个版本,重点优化了短查询性能,并修复了一批跨 shell、跨平台的细节问题:

2.1 性能优化

  • 短查询大幅提速:短查询会扫描最大的候选集,首次按键需要扫描整个输入。单字符查询提速最高 2.4 倍,双字符查询提速最高 1.4 倍
  • 更快的排序:搜索结果排序更快,跳过冗余的基数(radix)遍历

2.2 功能改进

  • change-border-labeltransform-border-label 现在可作用于 tmux 或 Zellij 浮动窗格的原生边框
  • fzf 现在可以在 Windows 的 --height 模式下检测终端窗口大小变化

2.3 Bug 修复

  • 修复预览命令发出的 Kitty 图形序列被 tmux 误当作窗格标题请求的问题
  • 修复 --preview-window ~N 导致预览顶部图片撕裂的问题
  • 修复匹配高亮位置不确定的问题
  • 修复 fzf 作为库使用时,Run() 返回后信号和窗口大小调整处理器仍残留的问题
  • fish:修复历史命令受用户初始化脚本影响的问题,并改进 CTRL-R 中时间戳的颜色
  • zsh:修复 perl 可用时 CTRL-R 不传递 fzf 退出状态的问题
  • zsh:修复 ALT-C 导致 chpwd 钩子函数被调用两次的问题

3. 获取安装包

如果访问 GitHub 不便,安装包及中文文档:https://hanshuixin.org/go/2259(内含 fzf-0.74.2-linux_amd64.tar.gz、README 中英对照、发布说明中英对照和 LICENSE)。

适用于 Linux x86_64(amd64)。

fzf 其他版本https://hanshuixin.org/resource/software_integrated_package/Linux/fzf

Linux安装fzf-v0.74.2(fzf-0.74.2-linux_amd64).zip
├── fzf-0.74.2-linux_amd64.tar.gz   ← 解压后部署使用
├── Linux安装fzf-v0.74.2(fzf-0.74.2-linux_amd64).pdf
├── README/
│   ├── README.md
│   └── README-中文版.md
├── 发布说明/
│   ├── RELEASE-NOTES.md
│   └── RELEASE-NOTES-中文版.md
└── LICENSE

4. 安装

fzf-0.74.2-linux_amd64.tar.gz 是 fzf 官方发布的 Linux amd64/x86_64 二进制发行包,内含 Go 静态编译的单文件可执行程序,无运行时依赖,不绑定特定发行版,适用于绝大多数 Linux 环境。

# 解压发行包
tar -xzf fzf-0.74.2-linux_amd64.tar.gz

# 将可执行文件部署到系统路径(推荐 /usr/local/bin)
sudo mv fzf /usr/local/bin/

# 验证安装
fzf --version

4.1 shell 集成配置

fzf 的核心价值在于与 shell 的深度集成。在 shell 配置文件中添加对应的一行,即可启用命令行快捷键(CTRL-T、CTRL-R、ALT-C)和模糊补全:

  • bash(~/.bashrc

    eval "$(fzf --bash)"
    source ~/.bashrc
  • zsh(~/.zshrc

    source <(fzf --zsh)
  • fish(~/.config/fish/config.fish

    fzf --fish | source

重连一次终端后生效

--bash--zsh--fish 选项仅在新版本 fzf 中可用;旧版本可在 /shell 目录中逐个 source 对应脚本文件。

5. 使用

5.1 经典使用场景

fzf 的用法本质上就一句话:把一份列表交给它,输入关键字筛选,回车选择。下面是最常见的几个场景。这些场景基于全新安装的 Debian 12,所需命令全部系统自带(fzf 本身除外),无需额外安装 git、docker、fd、bat 等工具。

场景一:打开一个只记得一半名字的文件

首先创建一个演示目录并放入几个示例文件:

mkdir -p ~/demo && cd ~/demo
touch monthly-report.md quarterly-report.md notes.txt config.yaml
# 输入 cat 后加两个星号再按 TAB,直接进入模糊补全
cat **<TAB>

界面出现后,输入 report,列表立即只剩文件名里带 report 的文件,上下键选中,回车即显示内容。整个过程不用记完整路径。

想用编辑器打开时,把 cat 换成 vi 即可(Debian 12 自带 vim-tiny 提供的 vinano 需另行安装)。

场景二:找回以前敲过的命令

# 先执行几条命令,让历史记录里有一些内容
ls -la
cat /etc/os-release
df -h
# 然后按 CTRL-R,输入关键字,历史命令瞬间筛出匹配项
# 例:只记得刚才查过磁盘,输入 df

按一次回车即可重新执行;再按一次 CTRL-R 可切换为按时间顺序显示。

场景三:快速跳进某个目录

# 先创建几个层级目录
mkdir -p ~/project/backend/config ~/project/frontend/src ~/docs
# 按 ALT-C,输入目录名关键字,选中后直接 cd 进入
# 例:想进 ~/project/backend/config,输入 config

省去一层层 cd 的麻烦。

场景四:杀某个进程

# 先启动一个后台进程,作为待查找的目标
sleep 1000 &
# 然后按 kill -9 后加两个星号再按 TAB,输入 sleep 选中
kill -9 **<TAB>

不用先 ps 查 PID 再手动抄下来,模糊补全会列出匹配的 PID 供选择。

场景五:在已安装的软件包里快速定位

# 列出 Debian 所有已安装的软件包,输入关键字瞬间筛选
dpkg -l | fzf

例如输入 python,即可在数百个已装软件包里迅速找到 python3 等带 python 的软件包。

场景六:在任何命令的输出里挑选

# 从系统服务列表里挑一个(查看运行状态)
systemctl list-units --type=service | fzf

# 回到场景一创建的演示目录,从 txt 文件里挑一个查看内容
cd ~/demo
ls *.txt | fzf --preview 'cat {}' | xargs cat

5.2 基本使用

fzf 从 STDIN 读取列表,把选中的条目写到 STDOUT,因此可以嵌入任何命令管道:

# 筛选文件并写入结果
find * -type f | fzf > selected

# 用 fzf 选文件并查看内容
cat $(fzf)

# 从命令历史中模糊查找
history | fzf

没有 STDIN 管道时,fzf 会遍历当前目录下的文件系统来生成文件列表。在查找器界面中,CTRL-K / CTRL-J(或 CTRL-P / CTRL-N)上下移动光标,Enter 选择条目,CTRL-C / CTRL-G / ESC 退出;多选模式(-m)下用 TABShift-TAB 标记多个条目,并支持鼠标操作。

5.3 命令行快捷键

配置 shell 集成后,可在 bash、zsh、fish、Nushell 中使用以下快捷键:

  • CTRL-T:遍历文件与目录,将选中路径粘贴到命令行
  • CTRL-R:从命令历史中模糊查找命令;再次按下切换为按时间顺序排序
  • ALT-C:模糊匹配目录并 cd 进入

5.4 搜索语法

fzf 默认支持模糊匹配,输入的关键字可以不全、可以顺序不对,它会按匹配度排序。需要精确控制时,可用以下语法:

语法 匹配类型 说明
sbtrkt 模糊匹配 匹配包含 sbtrkt 的条目
'wild 精确匹配(加引号) 包含 wild 的条目
'wild' 精确边界匹配 单词边界处包含 wild 的条目
^music 前缀精确匹配 music 开头的条目
.mp3$ 后缀精确匹配 .mp3 结尾的条目
!fire 反向精确匹配 不包含 fire 的条目
!^music 反向前缀精确匹配 不以 music 开头的条目
!.mp3$ 反向后缀精确匹配 不以 .mp3 结尾的条目

单个竖线字符(|)充当 OR 运算符:^core go$ | rb$ | py$ 匹配以 core 开头、且以 gorbpy 结尾的条目。

5.5 预览窗口

--preview 选项开启预览窗口,fzf 自动以当前行为参数启动外部进程并显示结果,选中前就能看到内容:

# 预览文件内容(cat 为系统自带)
find . -type f | fzf --preview 'cat {}'

# 预览软件包详情
dpkg -l | fzf --preview 'apt-cache show {2} 2>/dev/null | head -20'

若想获得彩色高亮的预览效果,可安装 bat 后把预览命令换成 bat --color=always {};不装 bat 时用系统自带的 cat 即可。

--preview-window 选项可自定义预览窗口的大小、位置和边框;预览窗口支持 ANSI 颜色与图片显示(Kitty graphics、iTerm2 inline images、Sixel 协议)。

5.6 常用环境变量与高级用法

# 默认输入来源:不传管道时用 find 生成文件列表
export FZF_DEFAULT_COMMAND='find . -type f'

# 默认选项:反向布局 + 底部 40% 高度
export FZF_DEFAULT_OPTS='--height 40% --layout reverse --border'

# 多选并把选中文件用 vi 打开(become 把 fzf 转变为新进程)
fzf --multi --bind 'enter:become(vi {+})'

# 交互式 grep 集成:输入时实时搜索当前目录下的文件内容
: | fzf --bind 'start:reload:grep -rn "" .' \
        --bind 'change:reload:grep -rn {q} . || true' \
        --bind 'enter:become(vi +{2} {1})' \
        --ansi --disabled --delimiter : --nth 2..

其他常用选项可通过手册页查看:fzf --manman fzf