Skip to content

CLI

面向前后端开发者的现代命令行工具集,专注于工具本身的能力与实际使用场景。


目录


终端体验

starship — 跨 Shell 提示符

在提示符中实时显示当前目录、Git 分支与状态、语言运行时版本、命令执行时长、退出码等信息。无需手动配置每种 Shell,写一份 ~/.config/starship.toml 到处通用。

bash
# 配置文件位置
~/.config/starship.toml

# 常用字段示例
[git_branch]
symbol = " "

[directory]
truncation_length = 3

使用场景:不用再 git status 确认分支,提示符已经显示了。


direnv — 目录级环境变量

进入目录时自动加载 .envrc 文件中定义的环境变量,离开时自动卸载。不同项目的 API Key、数据库地址等配置完全隔离,不用手动 export

bash
# 在项目根目录
echo 'export DATABASE_URL="postgres://..."' >> .envrc
direnv allow      # 首次需要授权

# 进入目录:环境变量自动生效
# 离开目录:环境变量自动清除

使用场景:多项目切换,每个项目有自己的 .envrc,再也不会把测试库地址连到生产环境。


zoxide — 智能目录跳转

记录你访问过的所有目录,并按访问频率+时间排序。输入目录名的一部分即可直接跳转,不需要输完整路径。

bash
# 跳转到包含 "tousu" 的目录(频率最高的那个)
z tousu

# 交互式选择(结合 fzf)
zi

# 查看数据库
zoxide query --list

使用场景:项目在 /home/xupeng/projects/company/backend/tousu_server,只需 z tousu_s 即到。


文件与目录导航

eza — 现代文件列表

ls 的替代品。原生支持文件图标、Git 状态标记(哪些文件被修改/新增/忽略)、目录优先排序、人类可读的权限和文件大小。

bash
# 长格式,显示 Git 状态
ll
# 等同于: eza -lah --icons --git --group-directories-first

# 树状结构,常用于查看项目结构
tree
# 等同于: eza --tree --icons

# 只看两层深度
eza --tree --icons -L 2

# 按修改时间排序(查最近改了什么)
eza -lah --icons --sort=modified

Git 状态标记含义:M 已修改、N 新增未追踪、I 已忽略、D 已删除。


yazi — 终端文件管理器

全功能终端文件管理器。支持图片预览(需要终端支持)、代码文件语法高亮预览、归档文件内容预览、批量重命名、复制/移动、Shell 命令集成。

bash
# 启动
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 — 模糊搜索过滤器

通用的交互式模糊搜索工具。本身只是一个过滤器,可以接收任何命令的输出,让你从中交互式选择一项。

bash
# 交互式选择文件并用编辑器打开
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 修改标记(哪行是新增/修改),支持所有主流语言和配置文件格式。

bash
# 查看文件(已通过 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 自动生效。

bash
# ~/.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 | delta

Micro — 现代终端编辑器

介于 nano(太简单)和 vim(学习曲线陡)之间的终端文本编辑器。支持鼠标操作、多光标、语法高亮、插件系统,快捷键与桌面编辑器一致(Ctrl+S 保存、Ctrl+Z 撤销、Ctrl+F 搜索)。

bash
# 打开文件
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 中的文件、隐藏文件、二进制文件。支持正则表达式,默认彩色高亮。

bash
# 在当前目录递归搜索
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 文件,默认彩色输出。

bash
# 查找文件名包含 "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 响应的必备工具。

bash
# 格式化美化 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 风格的查询语法。

bash
# 读取 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 进程、过滤进程、排序。

bash
btop

# 界面内快捷键
# F2 或 o    设置选项
# F6         选择排序字段
# /          过滤进程
# k          kill 选中进程
# q          退出

duf — 磁盘使用概览

df 的替代品。以更友好的表格形式显示所有挂载点的磁盘使用情况,彩色、对齐,一眼看清哪个分区快满了。

bash
duf

# 只显示本地文件系统
duf --only local

# 只显示特定挂载点
duf /home /tmp

dust — 目录大小分析

du 的替代品。以树状结构显示哪个子目录占用了最多空间,快速定位磁盘空间消耗来源。

bash
# 分析当前目录
dust

# 分析指定目录
dust /var/log
dust ~/.nvm

# 只显示前 10 个
dust -n 10

# 显示完整路径
dust -p

mtr — 网络路由追踪

traceroute + ping 的结合体。实时显示每个网络跳点的延迟和丢包率,持续更新,便于诊断网络问题出在哪一跳。

bash
# 交互模式(持续更新)
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 响应,内置语法高亮,支持会话保持。

bash
# 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/test

doggo — DNS 查询工具

dig 的替代品。DNS 查询结果以彩色表格形式输出,清晰易读,支持多种 DNS 协议。

bash
# 查询 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 --time

Git 工作流

lazygit — 终端 Git 界面

全功能的终端 Git 交互界面。可以在界面内完成暂存、提交、推送、分支管理、rebase、cherry-pick、查看 diff、解决冲突等所有操作,无需记忆 git 命令。

bash
# 启动(在 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
Stashstash 列表管理

delta

(见 文本查看与处理 章节,专门美化 git diff 输出)


容器管理

Lazydocker — 终端 Docker 界面

Docker 的终端可视化管理工具,类似 lazygit 之于 Git。可以查看容器状态、实时日志、资源占用,执行 exec 进入容器,停止/重启/删除容器和镜像,无需记忆 docker 命令。

bash
lazydocker

# 面板说明
# 左侧:容器列表 / 镜像列表 / 网络 / 卷
# 右侧:详情、日志、统计、配置

# 常用操作(在容器上)
# enter    查看日志
# e        exec 进入容器(bash/sh)
# s        停止/启动
# d        删除
# R        重启
# [        查看统计(CPU/内存)

日志分析

专为日志文件设计的交互式查看工具。自动识别日志格式(nginx、syslog、JSON 日志等)、多文件合并查看、时间戳解析与过滤、正则搜索、实时追踪新日志,还支持 SQL 查询日志内容。

bash
# 查看单个文件
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 查询模式示例:

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 文件)。

bash
# 安装最新 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    # 自动读取 .nvmrc

g — Go 版本管理

与 nvm 类似,但专门管理 Go 版本。

bash
# 安装最新稳定版
g install latest

# 安装指定版本
g install 1.23.0

# 切换版本
g set 1.22.0

# 查看已安装版本
g list

# 查看可安装版本
g list-all


推荐新增工具

1. zellij — 终端多路复用器

比 tmux 更现代的终端多路复用工具。可以在一个终端窗口内分割出多个面板(split pane),支持标签页,持久会话(SSH 断开后程序继续运行)。界面底部常驻快捷键提示,无需背快捷键。

bash
# 安装
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 强大得多。

bash
# 安装
brew install atuin

# 在 ~/.bashrc 末尾添加
eval "$(atuin init bash)"

# 使用
# Ctrl+R    打开历史搜索界面
# 在界面内可按 Ctrl+D 过滤只看当前目录的命令历史

推荐理由:历史命令再也不会被 HISTSIZE 截断丢失,数年前用过的命令都能搜出来。


3. gh — GitHub 官方 CLI

在命令行完成 GitHub 操作:创建/查看 PR、issue、review、管理 release、查看 Actions 运行状态,无需打开浏览器。

bash
# 安装
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          # 创建 release

4. just — 命令运行器

Makefile 更友好的项目命令管理工具。在 Justfile 中定义常用命令,支持参数、依赖关系、注释文档。

bash
# 安装
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 20240101

5. websocat — WebSocket 调试

命令行 WebSocket 客户端,用于测试 WebSocket 接口,功能类似 httpie 但针对 WS 协议。

bash
# 安装
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。

bash
# 安装
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/GetUser

7. tldr — 简化的命令手册

社区维护的命令速查手册。man 页面往往几十页,tldr 只给你最常用的几个例子,覆盖 80% 的使用场景。

bash
# 安装
brew install tldr

# 更新数据库
tldr --update

# 查看命令用法示例
tldr tar
tldr ssh
tldr docker
tldr git

# 指定平台(linux/macos/windows/android)
tldr --platform linux mount

8. hyperfine — 命令性能基准测试

对命令行程序进行基准测试,多次运行取平均值,支持预热、对比多个命令、导出结果。

bash
# 安装
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 多个目标。

bash
# 安装
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。

bash
# 安装
brew install dive

# 分析镜像
dive my-app:latest
dive nginx:alpine

# 界面说明
# 左侧:镜像层列表,显示每层大小和命令
# 右侧:该层的文件系统变更(绿色新增/黄色修改/红色删除)
# Tab   切换左右面板
# Space 折叠/展开目录
# Ctrl+F 过滤文件
# Ctrl+U 只显示修改的文件

# CI 模式(检查镜像效率,可集成到流水线)
CI=true dive my-app:latest

工具速查表

工具替代主要用途
ezals文件列表(图标+Git状态)
batcat文件查看(语法高亮)
rggrep内容搜索(极速)
fdfind文件查找
zoxidecd目录跳转(智能记忆)
delta-Git diff 美化
jq-JSON 处理
yq-YAML/TOML 处理
httpiecurlHTTP 调试
doggodigDNS 查询
dufdf磁盘使用概览
dustdu目录大小分析
btoptop/htop系统资源监控
mtrtraceroute网络路由追踪
lazygitgit cliGit 可视化操作
lazydockerdocker cliDocker 可视化管理
lnavtail/less日志查看分析
yazi-终端文件管理器
fzf-交互式模糊搜索
starship-Shell 提示符
direnv-目录级环境变量
nvm-Node.js 版本管理
g-Go 版本管理
zellijtmux终端多路复用
atuinCtrl+RShell 历史增强
gh-GitHub CLI
justmake项目命令管理
websocat-WebSocket 调试
grpcurl-gRPC 调试
tldrman命令速查手册
hyperfine-命令性能测试
gpingping图形化 Ping
dive-Docker 镜像分析