CLI
面向前后端开发者的现代命令行工具集,专注于工具本身的能力与实际使用场景。
目录
终端体验
starship — 跨 Shell 提示符
在提示符中实时显示当前目录、Git 分支与状态、语言运行时版本、命令执行时长、退出码等信息。无需手动配置每种 Shell,写一份 ~/.config/starship.toml 到处通用。
# 配置文件位置
~/.config/starship.toml
# 常用字段示例
[git_branch]
symbol = " "
[directory]
truncation_length = 3使用场景:不用再 git status 确认分支,提示符已经显示了。
direnv — 目录级环境变量
进入目录时自动加载 .envrc 文件中定义的环境变量,离开时自动卸载。不同项目的 API Key、数据库地址等配置完全隔离,不用手动 export。
# 在项目根目录
echo 'export DATABASE_URL="postgres://..."' >> .envrc
direnv allow # 首次需要授权
# 进入目录:环境变量自动生效
# 离开目录:环境变量自动清除使用场景:多项目切换,每个项目有自己的 .envrc,再也不会把测试库地址连到生产环境。
zoxide — 智能目录跳转
记录你访问过的所有目录,并按访问频率+时间排序。输入目录名的一部分即可直接跳转,不需要输完整路径。
# 跳转到包含 "tousu" 的目录(频率最高的那个)
z tousu
# 交互式选择(结合 fzf)
zi
# 查看数据库
zoxide query --list使用场景:项目在 /home/xupeng/projects/company/backend/tousu_server,只需 z tousu_s 即到。
文件与目录导航
eza — 现代文件列表
ls 的替代品。原生支持文件图标、Git 状态标记(哪些文件被修改/新增/忽略)、目录优先排序、人类可读的权限和文件大小。
# 长格式,显示 Git 状态
ll
# 等同于: eza -lah --icons --git --group-directories-first
# 树状结构,常用于查看项目结构
tree
# 等同于: eza --tree --icons
# 只看两层深度
eza --tree --icons -L 2
# 按修改时间排序(查最近改了什么)
eza -lah --icons --sort=modifiedGit 状态标记含义:M 已修改、N 新增未追踪、I 已忽略、D 已删除。
yazi — 终端文件管理器
全功能终端文件管理器。支持图片预览(需要终端支持)、代码文件语法高亮预览、归档文件内容预览、批量重命名、复制/移动、Shell 命令集成。
# 启动
yazi
# 退出并跳转到当前目录(需在 bashrc 中配置 shell wrapper)
# 在 ~/.bashrc 中添加:
function y() {
local tmp="$(mktemp -t "yazi-cwd.XXXXXX")" cwd
yazi "$@" --cwd-file="$tmp"
if cwd="$(command cat -- "$tmp")" && [ -n "$cwd" ] && [ "$cwd" != "$PWD" ]; then
builtin cd -- "$cwd"
fi
rm -f -- "$tmp"
}常用快捷键:
| 按键 | 动作 |
|---|---|
hjkl | 导航(vim 风格) |
Enter | 进入目录 / 打开文件 |
Space | 多选 |
y | 复制 |
d | 剪切 |
p | 粘贴 |
r | 重命名 |
a | 新建文件/目录 |
q | 退出 |
fzf — 模糊搜索过滤器
通用的交互式模糊搜索工具。本身只是一个过滤器,可以接收任何命令的输出,让你从中交互式选择一项。
# 交互式选择文件并用编辑器打开
micro $(fzf)
# 交互式搜索历史命令(Ctrl+R 默认行为增强)
# 已在 ~/.bashrc 通过 fzf 集成自动配置
# 交互式切换目录
cd $(find . -type d | fzf)
# 预览文件内容(结合 bat)
fzf --preview 'batcat --style=numbers --color=always {}'
# 交互式选择 git 分支并切换
git checkout $(git branch | fzf)
# 交互式 kill 进程
kill -9 $(ps aux | fzf | awk '{print $2}')使用场景:任何"从一堆东西里选一个"的场景,都可以接上 | fzf。
文本查看与处理
bat — 带语法高亮的 cat
cat 的替代品。显示行号、语法高亮、Git 修改标记(哪行是新增/修改),支持所有主流语言和配置文件格式。
# 查看文件(已通过 alias cat='batcat ...' 替换)
cat main.go
cat package.json
# 查看并显示行号(--style=numbers)
batcat --style=numbers,changes main.go
# 作为 man 的彩色 pager
export MANPAGER="sh -c 'col -bx | batcat -l man -p'"
# 比较两个文件(搭配 diff)
diff <(batcat file1.go) <(batcat file2.go)delta — Git diff 美化
替换 git diff 的渲染器。提供语法高亮的 diff、行内字符级差异标记、并排对比模式、行号显示。通过 ~/.gitconfig 配置后,所有 git diff/log/show 自动生效。
# ~/.gitconfig 配置
[core]
pager = delta
[delta]
navigate = true # 用 n/N 在文件间跳转
side-by-side = true # 并排对比
line-numbers = true
[interactive]
diffFilter = delta --color-only
# 直接调用(不通过 git)
diff file1 file2 | deltaMicro — 现代终端编辑器
介于 nano(太简单)和 vim(学习曲线陡)之间的终端文本编辑器。支持鼠标操作、多光标、语法高亮、插件系统,快捷键与桌面编辑器一致(Ctrl+S 保存、Ctrl+Z 撤销、Ctrl+F 搜索)。
# 打开文件
micro main.go
# 常用快捷键
# Ctrl+S 保存
# Ctrl+Q 退出
# Ctrl+F 搜索
# Ctrl+H 搜索替换
# Ctrl+Z 撤销
# Ctrl+G 跳转到指定行
# Alt+G 跳转到文件
# Ctrl+E 命令模式(执行内置命令)
# 多光标:Alt+鼠标点击
# 选中单词后 Ctrl+D 选下一个相同词(多光标编辑)搜索与过滤
ripgrep (rg) — 极速内容搜索
在文件内容中搜索,比 grep 快 10-100 倍。自动忽略 .gitignore 中的文件、隐藏文件、二进制文件。支持正则表达式,默认彩色高亮。
# 在当前目录递归搜索
rg "TODO"
# 搜索特定文件类型
rg "useState" --type tsx
rg "func Handler" --type go
# 显示上下文(前后各 2 行)
rg "error" -C 2
# 只显示文件名
rg "FIXME" -l
# 忽略大小写
rg -i "config"
# 搜索并替换(输出结果,不修改文件)
rg "oldFunctionName" --replace "newFunctionName"
# 统计匹配行数
rg "console.log" --count
# 搜索特定目录,排除另一个
rg "TODO" src/ --glob '!node_modules'fd-find (fd) — 现代文件查找
find 的替代品。语法更简单,速度更快,自动忽略 .gitignore 文件,默认彩色输出。
# 查找文件名包含 "config" 的文件
fd config
# 只找目录
fd -t d node_modules
# 只找指定扩展名
fd -e go
fd -e ts -e tsx
# 查找并执行命令
fd -e log -x rm {} # 删除所有 .log 文件
fd -e go -x gofmt -w {} # 格式化所有 Go 文件
# 在特定目录下查找
fd "main" ./src
# 包含隐藏文件和 .gitignore 忽略的文件
fd --hidden --no-ignore config数据处理
jq — JSON 处理器
命令行 JSON 处理与查询工具。可以解析、过滤、转换、格式化 JSON 数据,是处理 API 响应的必备工具。
# 格式化美化 JSON
echo '{"name":"test","value":1}' | jq .
# 提取字段
curl https://api.example.com/users | jq '.[0].name'
# 提取数组中所有元素的某个字段
jq '.[].email'
# 条件过滤
jq '.[] | select(.status == "active")'
# 重新构造 JSON
jq '{name: .name, age: .age}'
# 处理文件
jq '.data.items | length' response.json
# 转换为数组
jq '[.[] | {id, name}]'
# 紧凑输出(无空格)
jq -c .
# 原始字符串输出(不带引号)
jq -r '.token'
# 多行处理(每行一个 JSON)
cat logs.jsonl | jq '.level'yq — YAML/XML/TOML 处理器
与 jq 理念相同,但处理 YAML、XML、TOML、CSV 等格式,同样支持 jq 风格的查询语法。
# 读取 YAML 字段
yq '.server.port' config.yaml
# 修改字段并输出
yq '.replicas = 3' deployment.yaml
# 就地修改文件
yq -i '.image.tag = "v2.0.0"' values.yaml
# YAML 转 JSON
yq -o json config.yaml
# JSON 转 YAML
yq -p json -o yaml config.json
# 合并多个 YAML 文件
yq '. *= load("overrides.yaml")' base.yaml
# 查询 docker-compose.yml 中的服务列表
yq '.services | keys' docker-compose.yml系统监控
btop — 资源监控器
实时监控 CPU、内存、磁盘 I/O、网络流量、进程列表。界面美观,支持鼠标操作,可以直接在界面内 kill 进程、过滤进程、排序。
btop
# 界面内快捷键
# F2 或 o 设置选项
# F6 选择排序字段
# / 过滤进程
# k kill 选中进程
# q 退出duf — 磁盘使用概览
df 的替代品。以更友好的表格形式显示所有挂载点的磁盘使用情况,彩色、对齐,一眼看清哪个分区快满了。
duf
# 只显示本地文件系统
duf --only local
# 只显示特定挂载点
duf /home /tmpdust — 目录大小分析
du 的替代品。以树状结构显示哪个子目录占用了最多空间,快速定位磁盘空间消耗来源。
# 分析当前目录
dust
# 分析指定目录
dust /var/log
dust ~/.nvm
# 只显示前 10 个
dust -n 10
# 显示完整路径
dust -pmtr — 网络路由追踪
traceroute + ping 的结合体。实时显示每个网络跳点的延迟和丢包率,持续更新,便于诊断网络问题出在哪一跳。
# 交互模式(持续更新)
mtr google.com
# 生成报告后退出(10 次探测)
mtr --report --report-cycles 10 google.com
# 使用 TCP(穿越某些防火墙)
mtr --tcp --port 443 google.com
# 界面内:q 退出,d 切换显示模式,p 暂停网络调试
httpie — HTTP 客户端
比 curl 更人性化的 HTTP 调试工具。语法简洁,自动格式化 JSON 响应,内置语法高亮,支持会话保持。
# GET 请求
http GET https://api.example.com/users
# POST JSON(自动设置 Content-Type)
http POST https://api.example.com/users name="Alice" age:=30
# 带请求头
http GET https://api.example.com/me Authorization:"Bearer token123"
# 发送文件
http POST https://api.example.com/upload file@./photo.jpg
# 保持会话(Cookie 自动处理)
http --session=./session.json POST https://api.example.com/login username=admin password=secret
# 下载文件
http --download https://example.com/file.zip
# 只看响应头
http --headers GET https://api.example.com/
# 查看请求+响应全部内容
http --verbose POST https://api.example.com/testdoggo — DNS 查询工具
dig 的替代品。DNS 查询结果以彩色表格形式输出,清晰易读,支持多种 DNS 协议。
# 查询 A 记录
doggo example.com
# 查询特定记录类型
doggo MX gmail.com
doggo AAAA example.com
doggo TXT _dmarc.example.com
# 指定 DNS 服务器
doggo example.com @8.8.8.8
# 使用 DoH(DNS over HTTPS)
doggo example.com @https://cloudflare-dns.com/dns-query
# 查询并显示 RTT
doggo example.com --timeGit 工作流
lazygit — 终端 Git 界面
全功能的终端 Git 交互界面。可以在界面内完成暂存、提交、推送、分支管理、rebase、cherry-pick、查看 diff、解决冲突等所有操作,无需记忆 git 命令。
# 启动(在 git 仓库目录内)
lazygit
# 快捷键(在界面内)
# 1-5 切换面板(文件/分支/提交/Stash/等)
# Space 暂存/取消暂存文件
# c 提交
# p push
# P pull
# b 切换分支
# n 新建分支
# d 删除分支/文件
# enter 查看文件 diff
# ][ 或 ,. 在面板内切换标签页
# r rebase
# e 编辑文件
# q 退出面板说明:
| 面板 | 内容 |
|---|---|
| Status | 仓库状态概览 |
| Files | 工作区文件变更(暂存/未暂存) |
| Branches | 本地/远程分支管理 |
| Commits | 提交历史,支持修改/squash/revert |
| Stash | stash 列表管理 |
delta
(见 文本查看与处理 章节,专门美化 git diff 输出)
容器管理
Lazydocker — 终端 Docker 界面
Docker 的终端可视化管理工具,类似 lazygit 之于 Git。可以查看容器状态、实时日志、资源占用,执行 exec 进入容器,停止/重启/删除容器和镜像,无需记忆 docker 命令。
lazydocker
# 面板说明
# 左侧:容器列表 / 镜像列表 / 网络 / 卷
# 右侧:详情、日志、统计、配置
# 常用操作(在容器上)
# enter 查看日志
# e exec 进入容器(bash/sh)
# s 停止/启动
# d 删除
# R 重启
# [ 查看统计(CPU/内存)日志分析
lnav — 终端日志查看器
专为日志文件设计的交互式查看工具。自动识别日志格式(nginx、syslog、JSON 日志等)、多文件合并查看、时间戳解析与过滤、正则搜索、实时追踪新日志,还支持 SQL 查询日志内容。
# 查看单个文件
lnav /var/log/nginx/access.log
# 合并查看多个文件(按时间排序)
lnav /var/log/nginx/*.log
# 实时追踪(类似 tail -f,但更强大)
lnav -t /var/log/app/app.log
# 查看 stdin(如 docker logs)
docker logs my-container 2>&1 | lnav
# 常用快捷键
# / 搜索(支持正则)
# n/N 下一个/上一个匹配
# e/E 跳到下一个/上一个 error 级别日志
# w/W 跳到下一个/上一个 warning 级别日志
# i/I 跳到下一个/上一个 info 级别日志
# t/T 切换时间显示格式
# ; 进入 SQL 查询模式
# q 退出SQL 查询模式示例:
-- 统计每分钟的错误数
SELECT timeslice(log_time, '1m') AS minute, count(*) AS cnt
FROM lnav_msgs
WHERE log_level = 'error'
GROUP BY minute;版本管理
nvm — Node.js 版本管理
管理多个 Node.js 版本,可以随时在版本间切换,也可以按项目指定版本(.nvmrc 文件)。
# 安装最新 LTS 版本
nvm install --lts
# 安装指定版本
nvm install 20.11.0
# 切换版本
nvm use 18
nvm use --lts
# 查看已安装版本
nvm list
# 查看可安装版本
nvm list-remote --lts
# 设置默认版本
nvm alias default 20
# 项目级别固定版本(创建 .nvmrc 文件)
echo "20" > .nvmrc
nvm use # 自动读取 .nvmrcg — Go 版本管理
与 nvm 类似,但专门管理 Go 版本。
# 安装最新稳定版
g install latest
# 安装指定版本
g install 1.23.0
# 切换版本
g set 1.22.0
# 查看已安装版本
g list
# 查看可安装版本
g list-all推荐新增工具
1. zellij — 终端多路复用器
比 tmux 更现代的终端多路复用工具。可以在一个终端窗口内分割出多个面板(split pane),支持标签页,持久会话(SSH 断开后程序继续运行)。界面底部常驻快捷键提示,无需背快捷键。
# 安装
brew install zellij
# 启动
zellij
# 常用快捷键
# Ctrl+p → d 向下分割面板
# Ctrl+p → r 向右分割面板
# Ctrl+p → x 关闭当前面板
# Ctrl+t → n 新建标签页
# Alt+方向键 在面板间移动推荐理由:运行后端服务、前端 dev server、日志监控三个面板同时看,无需多开终端窗口。
2. atuin — Shell 历史增强
将所有 Shell 历史命令存入本地 SQLite 数据库,支持跨设备同步(可选)。按 Ctrl+R 搜索时显示全文搜索界面,可按命令、目录、时间等维度过滤历史,比默认的 Ctrl+R 强大得多。
# 安装
brew install atuin
# 在 ~/.bashrc 末尾添加
eval "$(atuin init bash)"
# 使用
# Ctrl+R 打开历史搜索界面
# 在界面内可按 Ctrl+D 过滤只看当前目录的命令历史推荐理由:历史命令再也不会被 HISTSIZE 截断丢失,数年前用过的命令都能搜出来。
3. gh — GitHub 官方 CLI
在命令行完成 GitHub 操作:创建/查看 PR、issue、review、管理 release、查看 Actions 运行状态,无需打开浏览器。
# 安装
brew install gh
# 登录
gh auth login
# 常用命令
gh pr list # 查看当前仓库的 PR
gh pr create --title "feat: xxx" # 创建 PR
gh pr view 123 # 查看 PR 详情
gh pr checkout 123 # 切换到 PR 的分支
gh issue list # 查看 issue
gh issue create # 创建 issue
gh run list # 查看 Actions 运行状态
gh run watch # 实时看当前 Actions 进度
gh release create v1.0.0 # 创建 release4. just — 命令运行器
比 Makefile 更友好的项目命令管理工具。在 Justfile 中定义常用命令,支持参数、依赖关系、注释文档。
# 安装
brew install just
# 项目根目录创建 Justfile
cat > Justfile << 'EOF'
# 启动开发服务器
dev:
pnpm run dev
# 构建生产版本
build:
pnpm run build
# 运行 Go 后端
server:
go run ./cmd/main.go
# 同时启动前后端
all:
just dev & just server
# 数据库迁移
migrate version="latest":
goose -dir ./migrations up {{version}}
# 清理构建产物
clean:
rm -rf dist/ .cache/
EOF
# 查看所有可用命令(带注释说明)
just --list
# 运行命令
just dev
just migrate 202401015. websocat — WebSocket 调试
命令行 WebSocket 客户端,用于测试 WebSocket 接口,功能类似 httpie 但针对 WS 协议。
# 安装
brew install websocat
# 连接 WebSocket
websocat ws://localhost:8080/ws
# 带请求头(如 token 认证)
websocat -H "Authorization: Bearer token123" ws://localhost:8080/ws
# 连接后发送 JSON
echo '{"type":"ping"}' | websocat ws://localhost:8080/ws
# 交互模式(逐行发送)
websocat ws://localhost:8080/ws
# 然后直接输入文本回车发送6. grpcurl — gRPC 调试
针对 gRPC 的命令行调试工具,等同于 httpie/curl 之于 HTTP。
# 安装
brew install grpcurl
# 列出服务(需要服务端开启 reflection)
grpcurl -plaintext localhost:50051 list
# 列出方法
grpcurl -plaintext localhost:50051 list MyService
# 调用方法
grpcurl -plaintext -d '{"name":"Alice"}' localhost:50051 MyService/SayHello
# 带 metadata(请求头)
grpcurl -H "Authorization: Bearer token" -plaintext \
-d '{"id":1}' localhost:50051 UserService/GetUser7. tldr — 简化的命令手册
社区维护的命令速查手册。man 页面往往几十页,tldr 只给你最常用的几个例子,覆盖 80% 的使用场景。
# 安装
brew install tldr
# 更新数据库
tldr --update
# 查看命令用法示例
tldr tar
tldr ssh
tldr docker
tldr git
# 指定平台(linux/macos/windows/android)
tldr --platform linux mount8. hyperfine — 命令性能基准测试
对命令行程序进行基准测试,多次运行取平均值,支持预热、对比多个命令、导出结果。
# 安装
brew install hyperfine
# 测试单个命令
hyperfine 'grep -r "TODO" .'
hyperfine 'rg "TODO" .'
# 对比两个命令
hyperfine 'find . -name "*.go"' 'fdfind -e go'
# 预热 3 次(排除缓存冷启动影响)
hyperfine --warmup 3 'cat large_file.json | jq .'
# 导出为 markdown 表格
hyperfine --export-markdown result.md 'cmd1' 'cmd2'9. gping — 图形化 Ping
在终端实时绘制 ping 延迟的折线图,可同时 ping 多个目标。
# 安装
brew install gping
# ping 单个地址
gping google.com
# 同时 ping 多个对比(适合排查网络问题)
gping google.com github.com 8.8.8.8
# q 或 Ctrl+C 退出10. dive — Docker 镜像分析
分析 Docker 镜像的每一层(layer),找出是哪个步骤让镜像体积变大,指导优化 Dockerfile。
# 安装
brew install dive
# 分析镜像
dive my-app:latest
dive nginx:alpine
# 界面说明
# 左侧:镜像层列表,显示每层大小和命令
# 右侧:该层的文件系统变更(绿色新增/黄色修改/红色删除)
# Tab 切换左右面板
# Space 折叠/展开目录
# Ctrl+F 过滤文件
# Ctrl+U 只显示修改的文件
# CI 模式(检查镜像效率,可集成到流水线)
CI=true dive my-app:latest工具速查表
| 工具 | 替代 | 主要用途 |
|---|---|---|
| eza | ls | 文件列表(图标+Git状态) |
| bat | cat | 文件查看(语法高亮) |
| rg | grep | 内容搜索(极速) |
| fd | find | 文件查找 |
| zoxide | cd | 目录跳转(智能记忆) |
| delta | - | Git diff 美化 |
| jq | - | JSON 处理 |
| yq | - | YAML/TOML 处理 |
| httpie | curl | HTTP 调试 |
| doggo | dig | DNS 查询 |
| duf | df | 磁盘使用概览 |
| dust | du | 目录大小分析 |
| btop | top/htop | 系统资源监控 |
| mtr | traceroute | 网络路由追踪 |
| lazygit | git cli | Git 可视化操作 |
| lazydocker | docker cli | Docker 可视化管理 |
| lnav | tail/less | 日志查看分析 |
| yazi | - | 终端文件管理器 |
| fzf | - | 交互式模糊搜索 |
| starship | - | Shell 提示符 |
| direnv | - | 目录级环境变量 |
| nvm | - | Node.js 版本管理 |
| g | - | Go 版本管理 |
| zellij | tmux | 终端多路复用 |
| atuin | Ctrl+R | Shell 历史增强 |
| gh | - | GitHub CLI |
| just | make | 项目命令管理 |
| websocat | - | WebSocket 调试 |
| grpcurl | - | gRPC 调试 |
| tldr | man | 命令速查手册 |
| hyperfine | - | 命令性能测试 |
| gping | ping | 图形化 Ping |
| dive | - | Docker 镜像分析 |