首页 > > 10 个 Mac 命令行工具推荐:装完就能用

10 个 Mac 命令行工具推荐:装完就能用

GK 更新于 2026年9月3日
一句话总结:换上这 10 个命令行工具,日常开发从”能用”变成”顺手”。每一个都有明确的替代对象,用法和原版高度重合,装上就能用,不需要学新概念。

适用人群:macOS 开发者,每天在终端待 2 小时以上。
前置要求:已安装 Homebrew
预计阅读:8 分钟。每个工具 1 分钟,看完就能装。
Mac 命令行工具推荐 —— 10 个装完就能用的 CLI 效率利器

macOS 自带的命令行工具够用,但不够好用。grep 在大项目里慢到要等、find 参数语法劝退、cat 看代码黑白一片、cd 要手打完整路径——每个小痛点单独看都能忍,但十个叠在一起,就是每天浪费的半小时。一套好的 Mac 命令行工具不做颠覆性的改变,只是在已有习惯的基础上把体验拉上去:搜得更快、看得更清、打得更少。

下面这 10 个工具,每一个都有明确的替代对象,全部通过 Homebrew 安装。不需要全装——挑你每天操作的痛点对应的工具,装上就能立刻感受到区别。

Mac 命令行工具之文件搜索:ripgrep + fd

两个最高频的操作——搜索代码内容和查找文件——恰好是自带工具体验最差的两项。ripgrep 和 fd 是这两个场景里公认的首选替换。

先说 ripgrep。它的核心竞争力就两点:快和省心。快是因为用 Rust 重写了正则引擎并做了多线程优化,在几十万行代码的项目里搜一个函数名,grep 要等几秒,ripgrep 通常 100ms 以内出结果。省心是因为它默认递归搜索且自动尊重 .gitignore——你不用每次敲 --exclude-dir=node_modules --exclude-dir=dist --exclude-dir=.next 之类的排除参数,ripgrep 自动跳过这些目录。

ripgrep(rg)

替代:grep。默认递归搜索、自动忽略 .gitignore、在大项目中比 grep 快 5 到 10 倍。

brew install ripgrep

真实场景:

  • 在所有 JS 文件里搜 useEffectrg "useEffect" --type js
  • 列出包含 TODO 的文件名(不显示匹配内容):rg -l "TODO" src/
  • 搜某个函数在哪些文件被调用:rg "functionName(" --type ts

ripgrep 默认尊重 .gitignore,意味着 node_modulesdist.next 这些目录自动跳过。grep 需要手动加 --exclude-dir,而且就算加了也比 rg 慢一个量级。在 20 万行代码的项目里搜一个函数名,grep 要等几秒,rg 是瞬间出结果。ripgrep 在 GitHub 上有 50k star,是 Rust 生态里最成功的命令行工具之一,几乎所有主流编辑器的文件搜索插件底层都是它。

fd

替代:find。语法直观、默认忽略 .gitignore、输出带颜色高亮文件名。

brew install fd

真实场景:

  • 按名字找配置文件:fd config——对比 find . -name "*config*",少打 12 个字符
  • 找所有 Markdown 文件:fd -e md
  • 找到后批量执行命令:fd -e py -x wc -l——统计所有 Python 文件行数
  • 按正则找文件:fd 'test.*.ts$'

fd 的设计哲学是”find 的常用场景降到最少击键”。find 的 -name -type -exec 参数组合在 fd 里变成了默认行为和短选项,而且输出默认带颜色——改了哪个文件、没改哪个,不用盯着黑白文本判断。

Mac 命令行工具之文件查看:bat + eza

bat

替代:cat。对代码文件自动语法高亮、显示行号、标记 Git 修改行、智能分页。

brew install bat

真实场景:

  • 看代码文件:bat src/App.tsx——自动识别 TypeScript 并高亮关键字
  • 看 JSON 配置文件:bat package.json——彩色缩进,一眼看清嵌套层级
  • 检查不可见字符:bat -A config.yaml——空格是点、Tab 是箭头、换行是 $
  • 纯文本输出(用于管道):bat -p file.txt——只有内容,没有行号边框

作为 Mac 命令行工具里最常用的文件查看器,bat 的智能分页规则:输出太长会自动走 less,管道给其他命令时自动禁用分页。不需要像 cat | less 那样每次都要判断要不要加 less。Git 集成也很实用——文件里你最近改过的行会在行号旁边标记 ~+

eza

替代:ls。彩色输出、Git 状态图标、目录优先排列、支持树形视图。

brew install eza

真实场景:

  • 详细列表 + 目录排最前面:eza -la --group-directories-first
  • 看哪些文件有 Git 改动:eza -l --git——新增/修改/未跟踪分别用不同图标标记
  • 树形展示目录结构:eza -T --level=2——替代 tree 命令
  • 只看目录:eza -D

迁移成本为零:在 .zshrc 里加 alias ls="eza",所有 ls -la 的习惯快捷键原封不动,多出来的颜色和图标是纯收益。

Mac 命令行工具之文本处理:jq + sd

jq

功能:命令行 JSON 处理器。没有直接的替代对象——没有 jq 的时候你只能靠 grep 和肉眼在压缩成一行的 JSON 里找字段。

brew install jq

真实场景:

  • API 返回取字段:curl -s api.github.com/repos/user/repo | jq '.stargazers_count'
  • 过滤数组:jq '.[] | select(.status=="active") | {name, email}' data.json
  • 美化压缩 JSON:cat ugly.json | jq——单行变彩色缩进
  • 提取嵌套数组并重组:jq '.data[].author | {name: .login, url: .html_url}'

后端开发每天都要用:curl 一个 API,管道给 jq,数据结构一目了然。不用 jq 就只能盯着那一长串没有换行的 JSON 脑补层级关系。学会 .[]select() 两个语法,能覆盖 90% 的使用场景。

sd

替代:sed。用直观的”查找-替换”语法替代 sed 的正则转义地狱。

brew install sd

真实场景:

  • 文件内替换字符串:sd "old_name" "new_name" file.txt
  • 预览改动再应用:sd -p "foo" "bar" file.txt——先显示会改什么
  • 批量重命名文件:ls *.jpg | sd "(.*)" "photo_$1"
  • 多文件替换:sd "import React from" "import { useState } from" src/*.tsx

对比 sed 的 sed -i 's/old_name/new_name/g' file.txt,sd 不需要记 s/.../.../g 的语法,也不需要在正则里疯狂加反斜杠。字符串替换就该这么直观。

Mac 命令行工具之交互增强:fzf + zoxide

fzf

功能:通用模糊搜索交互层。不是替代某个命令,而是给几乎所有命令行操作加一个”模糊选”的交互方式。

brew install fzf && $(brew --prefix)/opt/fzf/install

真实场景:

  • Ctrl+R 增强——模糊搜索命令历史,敲几个字符就定位到几分钟前那条长命令,比默认的逐条翻快一个数量级
  • Ctrl+T 选文件——当前目录模糊搜索文件名,选中后自动把路径贴到命令行光标位置
  • 快速 vim 打开文件:vim $(fzf)
  • 模糊搜索并 kill 进程:kill -9 $(ps aux | fzf | awk '{print $2}')
  • 结合 git:git checkout $(git branch | fzf | tr -d ' ')——模糊切分支

在所有 Mac 命令行工具中,fzf 最改变习惯的是接管 Ctrl+R。以前找一条历史命令:狂按上箭头或一段一段翻 Ctrl+R。现在:Ctrl+R → 打三个字母 → 命中。另外 ** 补全触发器也值得配——比如 vim ** 然后按 Tab,fzf 弹出文件选择界面。

zoxide

替代:cd。记住你频繁访问的目录,用部分路径名直接跳转。

brew install zoxide
# .zshrc 加一行:
eval "$(zoxide init zsh)"

真实场景:

  • 跳去经常用的项目目录:z proj——自动匹配 ~/code/my-project/
  • 部分路径模糊匹配:z conf nginx——匹配到 ~/etc/nginx/conf.d/
  • 交互式选择目录:zi——弹出 fzf 风格目录列表
  • 查看历史跳转记录:zoxide query -l

zoxide 统计目录访问频率来建立数据库,用得越多越准。实际效果:装了一周之后 z proj 百分之百跳到你脑子里想的那个项目目录。cd ../../../../some/deeply/nested/app 变成 z app——对深层目录结构的项目来说,这个差距每天都在累积。

Git 增强:delta —— diff 可视化

delta

替代:git diff 的默认黑白输出。语法高亮、行号、并排对比、改进的差异块导航。

brew install delta
# ~/.gitconfig 添加:
# [core]
#     pager = delta
# [interactive]
#     diffFilter = delta --color-only

真实场景:

  • git diff——自动语法高亮,改了什么类型的内容一目了然(字符串、函数名、注释颜色不同)
  • git diff --staged——提交前 review 暂存区改动
  • git show——看某次 commit 的具体变更,delta 会高亮改动行并显示行号
  • git log -p——历史变更都以高亮 diff 呈现

配好 .gitconfig 之后零额外操作——所有 git diff 相关命令自动走 delta 渲染。原来黑白两色的 diff 输出变成语法高亮 + 左右两栏对比 + 行号标注。review 同事代码或整理自己的提交前改动的效率,提升肉眼可见。

日常效率:tldr + xh —— 查手册和调 API

tldr

替代:man 的冗长手册。直接给出最常用的实际例子,而不是把所有参数列表扔给你。

brew install tldr

真实场景:

  • 忘了 tar 打包命令怎么写:tldr tar——给出 5 个最常用命令,而不是 2000 行手册
  • 查 rsync 怎么同步目录:tldr rsync
  • 看看 ffmpeg 转格式参数:tldr ffmpeg
  • 忘了 docker 清理命令:tldr docker——直接翻到清理相关例子

不是替代 man——复杂场景你还是需要完整文档。但 80% 的情况你只需要那两三个最常用的命令组合,偏偏 man 给你的恰好是那 2000 行里最难翻到的那部分。tldr 是社区维护的例子集,覆盖 1000+ 命令。

xh

替代:curl 在 HTTP API 调试场景的使用。语法更简洁、自动格式化 JSON 输出、默认语法高亮。

brew install xh

真实场景:

  • GET 请求并自动格式化 JSON:xh api.github.com/users/octocat——省掉 | jq
  • POST 提交表单数据:xh POST httpbin.org/post name=value [email protected]
  • 带认证 Header:xh GET api.example.com Authorization:"Bearer token123"
  • 下载文件并显示进度:xh -d https://example.com/file.zip

xh 和 curl 的核心差距:curl 调试 API 需要记 -X POST -H "Content-Type: application/json" -d '{"key":"value"}' 然后手动管道给 jq。xh 一次性省掉前面所有步骤——默认 JSON、默认格式化输出。命令行调 API 变成一件顺手的事。

一键安装

# 全部安装
brew install ripgrep fd bat jq fzf delta zoxide eza tldr xh sd

# fzf 安装后需要额外运行安装脚本(配置 Ctrl+R 和 Ctrl+T 的 shell 集成)
$(brew --prefix)/opt/fzf/install

# zoxide 需要手动加到 .zshrc(如果用的是 bash 改成 zoxide init bash)
echo 'eval "$(zoxide init zsh)"' >> ~/.zshrc
source ~/.zshrc

不建议无脑全装——先挑你每天操作最痛的场景对应的工具装上,用到顺手再加下一个。一般来说 rg + fd + jq + fzf 这四个装完,终端体验就已经质变了。后面 bat、delta、zoxide 属于锦上添花——装了会一直用,但不装也不影响前四个的体验。

别名一次配齐(抄作业版)

上面每个工具卡里都提到了别名,这里汇总成一份可以直接粘贴的 .zshrc 配置。只放参数完全兼容的别名——grep→rg、find→fd、diff→delta 这类参数不兼容的我不建议做 alias,直接敲新命令名反而更稳,脚本也不会被连累。

# ~/.zshrc 追加

# ls → eza:彩色列表 + Git 状态,默认目录优先
alias ls="eza -la --group-directories-first --git"

# cat → bat:语法高亮看代码(管道时自动退化为纯文本)
alias cat="bat"

# zoxide:z 按访问频率跳目录,接绝对路径时自动退回普通 cd
eval "$(zoxide init zsh)"

# fzf 的 Ctrl+R / Ctrl+T 在安装脚本里已配好,不用额外 alias
# rg / fd / jq 命令本身短,直接用原名,不设别名

改完执行 source ~/.zshrc 立即生效。注意 alias 只对交互终端生效——脚本里的 lscat 仍是系统原版,不会影响部署脚本的兼容性。

常见问题

这些工具在 Apple Silicon(M 系列)上有兼容问题吗?没有。上面 10 个工具全部提供 arm64 原生版本,brew install 会自动装对应架构,不需要 Rosetta。

装了 eza 之后,脚本里的 ls 会变吗?不会。alias 只作用于交互式 shell,非交互脚本默认不加载 .zshrc,ls 还是系统原版。真想连脚本输出一起换,直接写 eza 命令名。

bat 和 cat 混用会不会破坏管道?不会。bat 检测到输出不是终端(比如 bat file | grep foo)时,会自动禁用高亮、行号和分页,只输出纯文本——行为和 cat 一致。

fzf 和 zsh-autosuggestions 冲突吗?不冲突。fzf 接管的是 Ctrl+R 历史搜索,自动建议插件管的是输入时的灰色补全,作用在不同环节。唯一要注意的是别让两个插件绑定同一个快捷键。

这些工具 Linux 上能用吗?几乎全部可以:ripgrep、fd、bat、jq、fzf、zoxide、eza、delta、tldr、sd 都有 Linux 版,发行版包管理器直接装;xh 部分仓库更新慢,可以走 GitHub Release 的静态二进制。

公司电脑不让装 Homebrew 怎么办?Homebrew 默认装到用户目录(/opt/homebrew~/.homebrew),不需要管理员权限。完全锁死的环境,去各工具的 GitHub Release 页下载静态二进制放进 ~/bin,再在 .zshrc 里加进 PATH——上面这些工具大多提供免依赖二进制包。

总结

这些 Mac 命令行工具有一个共同特点——它们不会让你抛弃已经熟悉的操作方式,而是在不改动肌肉记忆的前提下把每一步变得更快、更清晰:它们是 macOS 自带命令的”补完”而非”替换”。你不需要学新范式,不需要改工作流——用惯了 grep 就还是搜,用惯了 cd 就还是跳转,只是更快、更好看、更少敲键盘。十分钟装完,收益是每天几十次操作里省下来的那几秒,以及——更大的好处——不用再忍受那些明明可以更好用但你一直以为”就这样了”的原生命令。

如果你对其他效率工具有兴趣,可以看之前写的 Mac 免费软件清单——那一篇偏向 GUI 应用,和这篇命令行工具互为补充。另外搭建本地开发环境时,合理配置 WordPress 本地 VPS 也能省去不少环境折腾的时间。如果你连软件都不想装,想先把手上的 Mac 用透,可以看 22 个 Mac 隐藏功能完全指南——那篇全是系统自带功能,和这篇命令行工具正好互补。

☁️
把这套环境搬到云上
工具链配好后,下一步通常是把开发环境搬到服务器(部署、常驻、随时接上),完整流程在这篇:服务器部署实录 · 选机器看 VPS 选购指南
@
订阅周刊
每月一封:当月新发的实测、优惠情报与踩坑记录,不发广告。订阅 →
© 2026 10 个 Mac 命令行工具推荐:装完就能用 · 本文由 GK 原创撰写,发布于 gkmix.com。 未经授权禁止转载、洗稿、机器抓取。AI 训练数据使用需获得书面授权。