我不是什么极客,只是个每天要在黑窗口里待上两三个小时的普通打工人。饿饿,饭饭,主打一个陪伴——但陪我的那几把工具,得顺手才行。( ゚▽゚)/

这篇不聊玄学,只聊八个我电脑上真实在用的开源命令行工具。它们没有一个是”必须”的,但每一个都实实在在替我少敲了几千次键盘。
🧭 先说结论:这套组合长什么样
用一句话概括:把”找内容、模糊查找、跳目录、看文件、列目录、多任务、管版本、盯资源”这八件事,各自换成一个更懂你的工具。全是开源、免费、跨平台的。
| 场景 | 常见做法 | 换成 | 一句话理由 |
|---|---|---|---|
| 搜内容 | grep | ripgrep(rg) | 默认跳过 .gitignore 里的目录,递归搜索快得多 |
| 模糊查找 | 靠记忆翻目录 | fzf | 什么列表都能接管道,历史命令、文件、分支一把梭 |
| 跳目录 | cd ../../.. | zoxide(z) | 记住你去过哪,报个名字就跳过去 |
| 看文件 | cat | bat | 语法高亮、行号、Git 改动标记 |
| 列目录 | ls | eza | 图标、Git 状态、树状视图,一眼看清 |
| 多任务 | 开一堆终端窗口 | tmux | 一个窗口挂多个会话,断线也不怕 |
| 管版本 | 背一堆 git 参数 | lazygit | 键盘操作的 Git 面板,暂存提交推送一目了然 |
| 看资源 | top / 任务管理器 | btop | TUI 里的 CPU、内存、网络、进程一览 |

🔧 一个一个说,为什么最后留下了它们
1. ripgrep:让”我记得写过这个词”变成”一秒找到”
ripgrep 是 Rust 写的,默认就会跳过 .gitignore 里列出的目录和隐藏文件,所以在几万个文件的仓库里搜关键字,基本是回车即出结果。我常用的三种姿势:
rg "TODO" # 全仓库找关键词
rg -n -w "config" src/ # 只搜 src,整词匹配,带行号
rg --files -g "*.md" # 按后缀列出文件
2. fzf:一个”什么都能搜”的中间件
fzf 是 Go 写的模糊查找器,它不生产结果,只是把管道流过来的东西变成可搜索的列表。所以它能接历史命令、文件路径、Git 分支、Docker 容器……我把它当”终端里的 Ctrl+P”。装上它的 shell 集成后,Ctrl+R 变成可搜索的历史命令,Ctrl+T 变成可交互的文件选择。
3. zoxide:把”跳目录”变成”报名字”
zoxide 会记录你去过哪些目录、去了多少次,然后用 z 加关键字直接跳。记得在 shell 配置里做一次初始化:
# ~/.bashrc 或 ~/.zshrc
eval "$(zoxide init bash)" # zsh 用户把 bash 换成 zsh
之后 z blog 就跳到最常去的那个 blog 目录;zi 会调起 fzf,让你在一堆候选里挑。
4. bat:cat 的”体面版本”
bat 会做语法高亮、显示行号、标出 Git 修改过的行。它默认走分页器(像 less),所以想拿它当 cat 用时得加参数:
alias cat='bat --paging=never'
它还有个贴心设计:输出被管道接走时,会自动去掉行号和装饰,只吐纯文本,不会破坏后面的处理。
5. eza:ls 的现代替代
eza 是 exa 的活跃维护分支,同样是 Rust 写的,默认就带颜色、图标,还能把 Git 状态标出来:
alias ll='eza -l --icons --git --group-directories-first'
eza --tree --level=2 # 树状看两层目录
小提醒:图标需要终端字体支持 Nerd Font,否则会显示成一排方块,不想折腾就加 –icons=never。
6. tmux:让”关掉窗口”不再等于”杀掉任务”
tmux 是终端复用器,一个窗口里挂多个会话。断开 SSH、合上盖子,会话都还在后台跑。
tmux new -s work # 新建名为 work 的会话
tmux ls # 看有哪些会话
tmux attach -t work # 回到 work
# 在会话里按 Ctrl+b 再按 d,是"脱离",不是退出
对我来说这不像效率问题,更像心态问题:跑长任务的时候,终于敢关电脑了。
7. lazygit:把 Git 变成一块键盘面板
lazygit 是 Go 写的 Git 终端界面:左边分支、中间文件、右边 diff,空格暂存、c 提交、P 推送。它不是替代 git,只是把”我知道要干嘛、但想不起参数”的那一段省掉了。
8. btop:资源监视器也可以很好看
btop 用 C++ 写,把 CPU、内存、磁盘、网络、进程塞进一个 TUI,还带历史曲线。在没有图形界面的服务器上,它比 top 友好太多。
🌙 它们连起来是什么样:一个真实的下班前十分钟
晚上十点,想改一篇旧文档,但忘了它在哪个目录。以前是三个窗口、四五次 cd、两次 ls;现在是这样:
z blog # 跳到博客目录
rg -l "旧标题" -g "*.md" | fzf --preview 'bat --color=always {}' # 找文件并预览
rg -l "旧标题" -g "*.md" | fzf | xargs -r nano # 选中就交给编辑器
省下的其实不是时间,是”算了不改了”的那点烦躁。
⚠️ 我踩过的 5 个坑,提前替你踩了
| 现象 | 原因 | 怎么处理 |
|---|---|---|
| bat 打开就停在分页界面,要按 q 才退出 | 默认使用分页器 | 别名里加 –paging=never |
| 提示 z 命令不存在 | 没做 shell 初始化 | 把 eval “$(zoxide init bash)” 写进 rc 文件,重开终端 |
| eza 满屏方块 | 终端字体没有图标字形 | 加 –icons=never,或换 Nerd Font 字体 |
| rg 搜不到 node_modules 里的内容 | 默认尊重 .gitignore | 加 –no-ignore(需要时再补 –hidden) |
| Ctrl+R 搜历史没反应 | fzf 的键绑定没启用 | 重跑安装脚本时选启用,或手动 source 对应 key-bindings 文件 |
📦 装起来:三条命令搞定大半
# macOS(Homebrew)
brew install ripgrep fzf zoxide bat eza tmux lazygit btop
# Ubuntu / Debian(仓库里没收录的再单独装)
sudo apt install ripgrep fzf zoxide bat tmux btop
# Windows(Scoop)
scoop install ripgrep fzf zoxide bat eza lazygit btop
各发行版收录情况不一样:eza、lazygit 在部分老版本仓库里没有,可以直接下 release 二进制,或者用 cargo / go 装;Debian 系里 bat 的可执行文件名有时是 batcat,别名时留意一下。
📺 想先看视频版?
B 站 UP 主 x-cmd 有一期《10 个终端高手技巧,Zsh 竟然还能这么用?》,讲的是同一类思路——先把 shell 本身调教顺手,再配合上面这些工具食用。
🐟 最后,说点心里话

我知道很多人第一次打开终端,是被”rm -rf /”的都市传说吓退的。可终端真实的样子,不是黑底白字的高冷,而是你把几十次重复劳动压成一行命令之后,那种”咦,我好像变强了一点点”的小确幸。
这篇文章里的工具没有一个是必须的,甚至你只留下 ripgrep 和 fzf,日子也会好过很多。工具的意义从来不是让你显得更专业,而是让你在深夜十一点,能早点合上电脑去睡觉。( ゚▽゚)/
如果你也有私藏的命令行小玩具,欢迎在评论区丢给我——我最近在收集”一条命令解决一件事”的清单,攒够十条就写第二篇。饿饿,饭饭,等你投喂。(๑•̀ㅂ•́)و✧
说明:文中工具均为开源项目,命令示例为日常用法演示,不同版本与发行版可能存在差异,以官方文档为准。














- 最新
- 最热
只看作者