Mac 终端命令行工具调研报告
调研概述
本文档系统性地整理了 macOS 平台上的终端命令行工具,涵盖终端模拟器、Shell 配置、系统工具增强、生产力工具等方面。这些工具能够显著提升 Mac 终端的使用体验和工作效率。
核心价值:
- 打造高效美观的终端环境
- 提升命令行操作效率
- 充分利用 macOS 系统特性
- 优化日常开发工作流
关联文档:
📖 快速导航
按类型分类
-
终端模拟器 - 替代系统自带 Terminal
- iTerm2、Warp、Alacritty、Kitty
-
Shell 与提示符 - 现代化 Shell 体验
- Fish、Starship、Oh My Posh
-
Mac 特有工具 - 利用 macOS 特性
- pbcopy/pbpaste、open、mdfind、osascript
-
文件管理工具 - 高效文件操作
- ranger、nnn、lf、broot
-
系统监控工具 - 实时系统信息
- btop、glances、neofetch
-
网络工具 - 网络诊断与测试
- httpie、curlie、bandwhich
-
生产力工具 - 提升效率
- fzf、autojump、tldr、cheat
-
终端美化 - 颜值优化
- 字体、配色方案、主题
-
脚本自动化工具 - 批量生产利器
- Shell脚本框架、任务调度、批量处理、脚本生成器
-
小众与特定领域工具 - 专业利器
- 音视频处理、网络分析、数据处理、容器工具、密码管理
按使用场景选择
- 终端模拟器 → iTerm2(功能全)/ Warp(现代化)
- Shell → Zsh + Starship / Fish
- 文件浏览 → ranger(强大)/ nnn(轻量)
- 系统监控 → btop / glances
- 模糊搜索 → fzf
- 快速跳转 → z / autojump
- HTTP 测试 → httpie
- 脚本框架 → argc(快速)/ Bashly(专业)
- 批量处理 → GNU Parallel
- 任务调度 → launchd
一、终端模拟器
1. iTerm2 ⭐⭐⭐⭐⭐
- 官网: https://iterm2.com/
- GitHub: https://github.com/gnachman/iTerm2
- Stars: 15k+
- 开源协议: GPL-2.0
- 平台支持: macOS
核心特点
-
Mac 最流行的终端
- 功能最完善
- 社区最活跃
- 插件生态丰富
-
分屏与窗口管理
- 水平/垂直分屏
- 标签页管理
- 窗口布局保存
- Hotkey Window(快捷键呼出)
-
搜索功能
- 全文搜索
- 正则表达式
- 高亮搜索结果
- 搜索历史
-
智能功能
- 自动补全(⌘;)
- 时光机回溯
- 触发器(Triggers)
- Shell Integration
-
外观定制
- 配色方案
- 透明度调节
- 背景图片/视频
- 字体配置
必备配置
快捷键设置:
⌘T 新建标签
⌘D 垂直分屏
⌘⇧D 水平分屏
⌘[/] 切换标签
⌘⌥方向键 切换分屏
⌘; 自动补全
⌘⇧H 粘贴历史
⌘F 搜索
⌘⌥B 时光机回溯
Hotkey Window(全局快捷键):
- Preferences → Keys → Hotkey
- 勾选 "Show/hide all windows with a system-wide hotkey"
- 设置快捷键(推荐 ⌥Space)
- 配置:
- Pin hotkey window to all Spaces(所有桌面可用)
- Animate showing and hiding(动画效果)
Shell Integration(必装):
curl -L https://iterm2.com/shell_integration/install_shell_integration_and_utilities.sh | bash
功能:
- 命令历史标记(成功/失败)
- 快速跳转到上一个命令(⌘↑)
- 选中命令输出(⌘⇧A)
- 下载文件到本地
- 显示命令执行时间
配色方案推荐:
# 安装配色方案
git clone https://github.com/mbadolato/iTerm2-Color-Schemes.git
cd iTerm2-Color-Schemes/schemes
# 常用方案:
- Dracula
- Solarized Dark
- Gruvbox Dark
- One Dark
- Nord
- Tokyo Night
导入方式:
- Preferences → Profiles → Colors
- Color Presets → Import
- 选择 .itermcolors 文件
字体配置:
# 推荐字体(支持 Powerline 图标)
brew install --cask font-fira-code-nerd-font
brew install --cask font-jetbrains-mono-nerd-font
brew install --cask font-meslo-lg-nerd-font
# iTerm2 设置
# Preferences → Profiles → Text
# Font: MesloLGS NF (Powerlevel10k 推荐)
# Size: 13pt
# 勾选: Use ligatures (连字)
高级功能
触发器(Triggers): 自动化响应特定输出
Preferences → Profiles → Advanced → Triggers
示例:
1. 高亮错误
正则: .*error.*
动作: Highlight Text (红色)
2. 通知
正则: .*BUILD SUCCESS.*
动作: Post Notification
3. 自动运行命令
正则: .*Test failed.*
动作: Run Command (./notify.sh)
Badges(徽章): 显示动态信息
Preferences → Profiles → General → Badge
示例:
\(session.name) # 会话名
\(user)@\(session.hostname) # 用户@主机
\(session.path) # 当前路径
Profiles(配置文件): 不同场景使用不同配置
创建多个 Profile:
- Local Development (本地开发)
- Production SSH (生产服务器 - 红色背景警示)
- Docker (Docker 容器)
快捷切换:⌘O → 选择 Profile
Python API:
#!/usr/bin/env python3
import iterm2
async def main(connection):
app = await iterm2.async_get_app(connection)
window = app.current_terminal_window
if window:
await window.async_create_tab()
session = window.current_tab.current_session
await session.async_send_text('ls -la\n')
iterm2.run_until_complete(main)
实用技巧
技巧 1: 快速 SSH 连接
Preferences → Profiles → General → Command
选择: Command
输入: ssh user@example.com
保存为 Profile,一键连接
技巧 2: 自动日志记录
Preferences → Profiles → Session
勾选: Automatically log session input to files
设置路径: ~/Logs/iterm/\(session.name)-\(timestamp).log
技巧 3: 密码管理器集成
Preferences → Profiles → Advanced → Triggers
正则: Password:
动作: Open Password Manager
技巧 4: 快速搜索并执行
1. ⌘F 搜索历史命令
2. ⌘E 将搜索结果发送到输入
3. Enter 执行
技巧 5: 智能选择
双击选择:单词
三击选择:行
⌘点击:URL 自动打开
⌥⌘点击:文件路径(在编辑器打开)
优势与劣势
✅ 优势
- 功能最完善,几乎无所不能
- 社区活跃,资源丰富
- 高度可定制
- Shell Integration 强大
- 免费开源
- Mac 原生体验
❌ 劣势
- 界面相对传统
- 配置复杂(功能太多)
- 启动速度不如现代终端
- GPU 加速支持有限
评分
- 功能完整性: ⭐⭐⭐⭐⭐ (5/5)
- 可定制性: ⭐⭐⭐⭐⭐ (5/5)
- 易用性: ⭐⭐⭐⭐ (4/5)
- 性能: ⭐⭐⭐ (3/5)
- 社区资源: ⭐⭐⭐⭐⭐ (5/5)
2. Warp ⭐⭐⭐⭐⭐
- 官网: https://www.warp.dev/
- 平台支持: macOS、Linux(Beta)
- 开源协议: 免费(闭源)+ 付费团队版
核心特点
-
21世纪的终端
- 使用 Rust 编写
- GPU 加速渲染
- 现代化 UI
-
革命性功能
- 命令编辑器(类似 IDE)
- 块状输出(Block)
- AI 命令建议
- 命令搜索
- 协作功能
-
AI 集成
- AI 命令解释
- 自然语言转命令
- 错误修复建议
- 命令优化
-
协作功能
- 共享会话
- 团队知识库
- Workflows 共享
核心功能详解
1. 命令编辑器
特性:
- 多行编辑(类似 IDE)
- 语法高亮
- 历史记录(⌘↑)
- 自动补全
- 括号匹配
2. Blocks(块)
每个命令及其输出是一个独立的块:
- 可折叠
- 可共享
- 可搜索
- 带时间戳
- 显示执行时间
3. AI 功能(Warp AI)
# 询问 AI
按 #,输入自然语言
示例:
"list all running docker containers"
→ AI 建议: docker ps
"find files larger than 100MB"
→ AI 建议: find . -type f -size +100M
"fix permission denied error"
→ AI 分析错误并给出解决方案
4. Workflows(工作流)
保存常用命令序列
示例:
名称: Deploy to Production
步骤:
1. git pull origin main
2. npm run build
3. docker build -t myapp .
4. kubectl apply -f k8s/
执行: ⌘P → 搜索 "Deploy" → Enter
5. 命令搜索
⌘P: 命令面板
- 搜索历史命令
- 搜索 Workflows
- 搜索 AI 建议
- 搜索文件
⌘K: 全局搜索
- 跨会话搜索
- 搜索输出内容
快捷键
⌘T 新建标签
⌘D 垂直分屏
⌘⇧D 水平分屏
⌘K 清屏
⌘P 命令面板
⌘R 搜索历史
⌘L 跳转到行
⌘⇧C 复制块输出
⌘⇧E 编辑命令
⌘/ 打开 AI
# Block 操作
⌘⇧↑/↓ 选择块
⌘⇧S 共享块
⌘⇧F 收藏块
实用场景
场景 1: AI 辅助调试
$ npm install 失败
1. 选中错误信息
2. 右键 → "Ask Warp AI"
3. AI 分析错误并给出解决方案
4. 一键应用建议的命令
场景 2: 团队协作
1. 运行复杂的调试命令
2. 右键命令块 → Share
3. 生成链接发给同事
4. 同事点击链接查看完整上下文
场景 3: 自定义 Workflows
创建 "Database Backup":
1. ⌘P → Create Workflow
2. 输入命令序列
3. 设置参数占位符
4. 保存
使用:
⌘P → "Database Backup" → 输入参数 → 执行
优势与劣势
✅ 优势
- 最现代化的终端
- GPU 加速,性能优秀
- AI 功能强大
- UI/UX 一流
- 命令编辑器革命性
- 块状输出便于管理
- 协作功能独特
❌ 劣势
- 闭源软件
- 某些高级功能需付费
- 学习曲线(新概念)
- 资源占用相对较大
- 可定制性不如 iTerm2
定价
- 免费版: 个人使用,AI 功能有限
- 团队版: $15/用户/月(无限 AI、团队协作)
评分
- 现代化: ⭐⭐⭐⭐⭐ (5/5)
- 性能: ⭐⭐⭐⭐⭐ (5/5)
- AI 功能: ⭐⭐⭐⭐⭐ (5/5)
- 易用性: ⭐⭐⭐⭐⭐ (5/5)
- 可定制性: ⭐⭐⭐ (3/5)
3. Alacritty ⭐⭐⭐⭐⭐
- 官网: https://alacritty.org/
- GitHub: https://github.com/alacritty/alacritty
- Stars: 56k+
- 语言: Rust
- 开源协议: Apache 2.0
- 平台支持: macOS、Linux、Windows
核心特点
-
最快的终端模拟器
- GPU 加速
- 极致性能优化
- 低延迟
-
极简主义
- 无标签页(依赖终端复用器)
- 无菜单栏
- 纯 YAML 配置
-
跨平台
- 统一体验
- 配置可移植
配置示例(~/.config/alacritty/alacritty.yml)
# 窗口设置
window:
opacity: 0.95
padding:
x: 10
y: 10
decorations: buttonless # 无标题栏
# 字体
font:
normal:
family: MesloLGS NF
style: Regular
size: 13.0
# 配色
colors:
primary:
background: '#1e1e2e'
foreground: '#cdd6f4'
# 快捷键
key_bindings:
- { key: N, mods: Command, action: SpawnNewInstance }
- { key: Q, mods: Command, action: Quit }
配合 tmux 使用
# 启动时自动进入 tmux
# ~/.zshrc
if command -v tmux &\> /dev/null && [ -z "$TMUX" ]; then
tmux attach -t default || tmux new -s default
fi
优势与劣势
✅ 优势
- 性能极致(最快)
- GPU 加速
- 资源占用低
- 跨平台
- 完全开源
- 配置简洁
❌ 劣势
- 功能极简(需配合 tmux)
- 无标签页
- 无滚动条
- 学习曲线(配置文件)
评分
- 性能: ⭐⭐⭐⭐⭐ (5/5)
- 资源占用: ⭐⭐⭐⭐⭐ (5/5)
- 跨平台: ⭐⭐⭐⭐⭐ (5/5)
- 功能: ⭐⭐ (2/5)
- 易用性: ⭐⭐⭐ (3/5)
4. Kitty ⭐⭐⭐⭐⭐
- 官网: https://sw.kovidgoyal.net/kitty/
- GitHub: https://github.com/kovidgoyal/kitty
- Stars: 24k+
- 语言: C + Python
- 开源协议: GPL-3.0
- 平台支持: macOS、Linux
核心特点
-
GPU 加速终端
- OpenGL 渲染
- 图片显示支持
- 真彩色支持
-
功能丰富
- 标签页和窗口
- 布局管理
- 键盘协议扩展
- 远程控制
-
独特功能
- 终端内显示图片
- Kittens(扩展脚本)
- Unicode 支持完善
配置示例(~/.config/kitty/kitty.conf)
# 字体
font_family JetBrains Mono
font_size 13.0
# 主题
include ~/.config/kitty/theme.conf
# 背景透明
background_opacity 0.95
# 标签页
tab_bar_style powerline
tab_powerline_style slanted
# 快捷键
map cmd+t new_tab
map cmd+w close_tab
map cmd+n new_os_window
# 图片显示
map cmd+i kitten icat /path/to/image.png
Kittens(扩展功能):
# 显示图片
kitty +kitten icat image.png
# Unicode 输入
kitty +kitten unicode_input
# 主题选择器
kitty +kitten themes
# Diff 工具
kitty +kitten diff file1 file2
# SSH 集成(保留本地配置)
kitty +kitten ssh user@host
优势与劣势
✅ 优势
- GPU 加速,性能好
- 功能丰富(比 Alacritty 多)
- 图片显示独特
- Kittens 扩展强大
- 完全开源
❌ 劣势
- 配置复杂
- 某些功能不如 iTerm2
- 社区不如 iTerm2 大
评分
- 性能: ⭐⭐⭐⭐⭐ (5/5)
- 功能: ⭐⭐⭐⭐ (4/5)
- 独特性: ⭐⭐⭐⭐⭐ (5/5)
- 易用性: ⭐⭐⭐ (3/5)
终端模拟器对比
| 终端 | 性能 | 功能 | 易用性 | 现代化 | 推荐场景 |
|---|---|---|---|---|---|
| iTerm2 | ⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | 全能、传统用户 |
| Warp | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐⭐ | 现代化、AI |
| Alacritty | ⭐⭐⭐⭐⭐ | ⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | 极致性能 |
| Kitty | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐⭐ | 图片显示 |
选择建议:
- 新手 → Warp(现代化、易用)
- 老手 → iTerm2(功能全、自由度高)
- 性能党 → Alacritty + tmux
- 极客 → Kitty(独特功能)
二、Shell 与提示符
注意:Zsh + Oh My Zsh 已在 开发者效能工具 中详细介绍,这里补充其他选择。
1. Fish Shell ⭐⭐⭐⭐⭐
- 官网: https://fishshell.com/
- GitHub: https://github.com/fish-shell/fish-shell
- Stars: 26k+
- 开源协议: GPL-2.0
核心特点
-
开箱即用
- 无需配置即可使用
- 自动建议(根据历史)
- 语法高亮
- Tab 补全强大
-
用户友好
- 配置 Web UI
- 脚本语法简单
- 错误提示清晰
-
强大功能
- 智能搜索
- 命令替换建议
- 函数自动补全
快速开始
# 安装
brew install fish
# 设为默认 Shell
echo /opt/homebrew/bin/fish | sudo tee -a /etc/shells
chsh -s /opt/homebrew/bin/fish
# 配置(Web UI)
fish_config
# 配置文件
~/.config/fish/config.fish
配置示例(config.fish)
# 别名
alias ll "eza -lah --icons"
alias vim "nvim"
# 环境变量
set -gx EDITOR nvim
set -gx GOPATH $HOME/go
# PATH
fish_add_path /opt/homebrew/bin
fish_add_path $HOME/.local/bin
# 提示符(使用 Starship)
starship init fish | source
# 插件管理器 Fisher
if not functions -q fisher
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
end
# 插件
fisher install jorgebucaran/nvm.fish
fisher install PatrickF1/fzf.fish
fisher install jethrokuan/z
常用插件(Fisher)
# 安装 Fisher
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher
# 插件推荐
fisher install jorgebucaran/nvm.fish # Node 版本管理
fisher install PatrickF1/fzf.fish # fzf 集成
fisher install jethrokuan/z # 目录跳转
fisher install franciscolourenco/done # 命令完成通知
fisher install oh-my-fish/theme-bobthefish # 主题
Fish 脚本示例
# 函数定义
function mkcd
mkdir -p $argv
cd $argv
end
# 条件判断
if test -f ~/.secret
source ~/.secret
end
# 循环
for file in *.txt
echo "Processing $file"
end
# 命令替换
set files (ls)
优势与劣势
✅ 优势
- 开箱即用,无需配置
- 自动建议准确
- 语法高亮美观
- Web 配置界面
- 用户体验极好
- 脚本语法清晰
❌ 劣势
- 不兼容 Bash/Zsh 脚本
- 某些工具不支持 Fish
- 插件生态不如 Zsh
- 学习新语法成本
评分
- 易用性: ⭐⭐⭐⭐⭐ (5/5)
- 开箱即用: ⭐⭐⭐⭐⭐ (5/5)
- 用户体验: ⭐⭐⭐⭐⭐ (5/5)
- 兼容性: ⭐⭐ (2/5)
- 插件生态: ⭐⭐⭐ (3/5)
2. Starship ⭐⭐⭐⭐⭐
- 官网: https://starship.rs/
- GitHub: https://github.com/starship/starship
- Stars: 45k+
- 语言: Rust
- 开源协议: ISC
核心特点
-
跨 Shell 提示符
- 支持 Bash、Zsh、Fish、PowerShell 等
- 统一配置
- 快速(Rust 编写)
-
智能显示
- 自动检测环境(Git、Node、Python 等)
- 只显示相关信息
- 可定制
-
美观
- Nerd Fonts 图标支持
- 配色丰富
- 预设主题
安装与配置
# 安装
brew install starship
# Zsh 集成(~/.zshrc)
eval "$(starship init zsh)"
# Fish 集成(~/.config/fish/config.fish)
starship init fish | source
# Bash 集成(~/.bashrc)
eval "$(starship init bash)"
配置文件(~/.config/starship.toml)
基础配置:
# 格式
format = """
[┌───────────────────\>](bold green)
[│](bold green)$directory$git_branch$git_status
[└─\>](bold green) """
# 目录
[directory]
style = "blue bold"
truncation_length = 3
truncate_to_repo = true
# Git 分支
[git_branch]
symbol = " "
style = "bold purple"
# Git 状态
[git_status]
style = "red bold"
完整示例:
# 在文件开头显示的内容
format = """
$username\
$hostname\
$directory\
$git_branch\
$git_state\
$git_status\
$nodejs\
$python\
$rust\
$golang\
$docker_context\
$time\
$line_break\
$character"""
# 右侧提示
right_format = """$cmd_duration"""
# 目录
[directory]
truncation_length = 3
truncate_to_repo = true
format = "[$path]($style)[$read_only]($read_only_style) "
style = "cyan bold"
# Git 分支
[git_branch]
format = "on [$symbol$branch]($style) "
symbol = " "
style = "bold purple"
# Git 状态
[git_status]
format = '([\[$all_status$ahead_behind\]]($style) )'
style = "bold red"
# Node.js
[nodejs]
format = "via [$symbol($version )]($style)"
symbol = " "
style = "bold green"
# Python
[python]
format = 'via [${symbol}${pyenv_prefix}(${version} )(\($virtualenv\) )]($style)'
symbol = " "
style = "bold yellow"
# Rust
[rust]
format = "via [$symbol($version )]($style)"
symbol = " "
style = "bold red"
# Go
[golang]
format = "via [$symbol($version )]($style)"
symbol = " "
style = "bold cyan"
# Docker
[docker_context]
format = "via [$symbol$context]($style) "
symbol = " "
style = "bold blue"
# 执行时间
[cmd_duration]
min_time = 500
format = "took [$duration]($style) "
style = "bold yellow"
# 时间
[time]
disabled = false
format = '🕙[\[ $time \]]($style) '
time_format = "%T"
style = "bold white"
# 字符
[character]
success_symbol = "[➜](bold green)"
error_symbol = "[✗](bold red)"
预设主题
# 查看所有预设
starship preset -l
# 使用预设(写入配置)
starship preset nerd-font-symbols -o ~/.config/starship.toml
# 常用预设:
nerd-font-symbols # Nerd Font 图标
bracketed-segments # 括号分隔
pure-preset # 极简风格
pastel-powerline # Powerline 风格
优势与劣势
✅ 优势
- 跨 Shell 支持
- 性能极快(Rust)
- 配置简单(TOML)
- 智能上下文感知
- 预设主题丰富
- 完全开源
❌ 劣势
- 需要 Nerd Font
- 配置较 Powerlevel10k 简单(功能少)
评分
- 性能: ⭐⭐⭐⭐⭐ (5/5)
- 跨平台: ⭐⭐⭐⭐⭐ (5/5)
- 易用性: ⭐⭐⭐⭐⭐ (5/5)
- 可定制性: ⭐⭐⭐⭐ (4/5)
3. Oh My Posh ⭐⭐⭐⭐
- 官网: https://ohmyposh.dev/
- GitHub: https://github.com/JanDeDobbeleer/oh-my-posh
- Stars: 17k+
- 语言: Go
- 开源协议: MIT
核心特点
-
跨平台提示符
- Windows、macOS、Linux
- 跨 Shell(Bash、Zsh、Fish、PowerShell)
- 统一体验
-
主题丰富
- 200+ 内置主题
- JSON 配置
- 易于自定义
快速开始
# 安装
brew install jandedobbeleer/oh-my-posh/oh-my-posh
# Zsh 集成
eval "$(oh-my-posh init zsh)"
# 使用主题
eval "$(oh-my-posh init zsh --config $(brew --prefix oh-my-posh)/themes/atomic.omp.json)"
优势与劣势
✅ 优势
- 主题丰富(200+)
- 跨平台最好
- Windows 支持优秀
❌ 劣势
- 性能不如 Starship
- 配置 JSON 格式(不如 TOML 直观)
评分
- 主题数量: ⭐⭐⭐⭐⭐ (5/5)
- 跨平台: ⭐⭐⭐⭐⭐ (5/5)
- 性能: ⭐⭐⭐ (3/5)
三、Mac 特有命令行工具
1. 剪贴板工具
# pbcopy - 复制到剪贴板
echo "Hello" | pbcopy
cat file.txt | pbcopy
pwd | pbcopy
# pbpaste - 从剪贴板粘贴
pbpaste
pbpaste \> file.txt
pbpaste | grep "pattern"
# 实用组合
# 复制当前路径
pwd | pbcopy
# 复制文件内容
cat ~/.ssh/id_rsa.pub | pbcopy
# 复制命令输出
ls -la | pbcopy
# 复制 Git 远程 URL
git remote get-url origin | pbcopy
2. open - 打开文件/应用/URL
# 打开文件(使用默认应用)
open file.pdf
open image.png
open document.docx
# 打开目录
open . # 当前目录(Finder)
open ~/Documents
open /Applications
# 打开 URL
open https://google.com
# 指定应用打开
open -a "Visual Studio Code" file.txt
open -a Safari https://google.com
open -a Preview image.png
# 编辑文件(TextEdit)
open -e file.txt
# 用 Finder 显示文件
open -R /path/to/file
# 打开多个文件
open file1.txt file2.txt
# 创建别名
alias chrome="open -a 'Google Chrome'"
alias code="open -a 'Visual Studio Code'"
3. mdfind - Spotlight 搜索
# 搜索文件
mdfind "filename"
mdfind -name "document.pdf"
# 搜索内容
mdfind "search term"
# 指定目录搜索
mdfind -onlyin ~/Documents "keyword"
# 按类型搜索
mdfind "kind:image"
mdfind "kind:pdf"
mdfind "kind:folder"
# 日期过滤
mdfind "kMDItemFSCreationDate \>= $date(2024-01-01)"
# 组合查询
mdfind "kind:image AND kMDItemPixelWidth \>= 1920"
# 实用示例
# 查找大文件
mdfind "kMDItemFSSize \>= 100000000" # \> 100MB
# 查找最近修改的文件
mdfind "kMDItemFSContentChangeDate \>= $time.now(-86400)" # 最近1天
# 查找特定扩展名
mdfind -name "*.js" -onlyin ~/Projects
4. osascript - 执行 AppleScript
# 显示通知
osascript -e 'display notification "Build Complete" with title "Success"'
# 显示对话框
osascript -e 'display dialog "Continue?" buttons {"No", "Yes"} default button "Yes"'
# 获取对话框输入
result=$(osascript -e 'text returned of (display dialog "Enter name:" default answer "")')
# 控制应用
osascript -e 'tell application "Safari" to activate'
osascript -e 'tell application "Music" to play'
# 设置音量
osascript -e "set volume output volume 50"
# 获取系统信息
osascript -e "system info"
# 实用脚本
# 构建完成通知
npm run build && osascript -e 'display notification "Build Complete" with title "npm"'
# 长时间任务完成语音通知
long_task && osascript -e 'say "Task completed"'
# 定时提醒
sleep 3600 && osascript -e 'display notification "1 hour passed" with title "Timer"'
5. say - 文本转语音
# 基本使用
say "Hello World"
# 指定语音
say -v Alex "Hello"
say -v Samantha "Hello"
# 列出所有语音
say -v ?
# 中文语音
say -v Ting-Ting "你好"
# 保存为音频文件
say -o output.aiff "Hello World"
# 从文件读取
say -f file.txt
# 实用示例
# 命令完成提醒
long_command && say "Command finished"
# 定时提醒
sleep 300 && say "5 minutes passed"
# 读出剪贴板内容
pbpaste | say
6. caffeinate - 防止休眠
# 防止系统休眠
caffeinate
# 防止休眠(指定时间)
caffeinate -t 3600 # 1小时
# 运行命令期间防止休眠
caffeinate -i make
# 防止显示器休眠
caffeinate -d
# 实用示例
# 下载时防止休眠
caffeinate -i wget large-file.zip
# 构建时防止休眠
caffeinate -i npm run build
# 长时间脚本
caffeinate -i ./long-running-script.sh
7. networkQuality - 网速测试
# 网速测试(macOS 12+)
networkQuality
# 详细输出
networkQuality -v
# 输出 JSON
networkQuality -c
8. textutil - 文档转换
# Word → PDF
textutil -convert pdf document.doc
# HTML → RTF
textutil -convert rtf document.html
# 批量转换
textutil -convert pdf *.doc
# 支持格式
# txt, html, rtf, rtfd, doc, docx, wordml, odt, webarchive
9. screencapture - 截图
# 截取整个屏幕
screencapture screen.png
# 截取窗口(交互选择)
screencapture -w window.png
# 截取区域(交互选择)
screencapture -i region.png
# 截图到剪贴板
screencapture -c
# 延迟截图(5秒)
screencapture -T 5 screenshot.png
# 静音(无快门声)
screencapture -x screenshot.png
# 实用示例
# 截图并打开
screencapture -i temp.png && open temp.png
# 定时截图
screencapture -T 10 -x screenshot.png
10. pmset - 电源管理
# 查看电源设置
pmset -g
# 查看电池信息
pmset -g batt
# 查看断言(阻止休眠的进程)
pmset -g assertions
# 设置显示器休眠时间
sudo pmset displaysleep 10 # 10分钟
# 设置系统休眠时间
sudo pmset sleep 30 # 30分钟
# 禁用休眠
sudo pmset -a disablesleep 1
# 查看休眠模式
pmset -g | grep hibernatemode
四、文件管理工具
1. ranger ⭐⭐⭐⭐⭐
- GitHub: https://github.com/ranger/ranger
- Stars: 15k+
- 语言: Python
核心特点
- VI 式文件管理器
- VI 快捷键
- 三栏预览
- 文件预览
快速开始
# 安装
brew install ranger
# 运行
ranger
# 基础快捷键
h/j/k/l 左/下/上/右
gg/G 顶部/底部
/ 搜索
: 命令模式
q 退出
2. nnn ⭐⭐⭐⭐⭐
- GitHub: https://github.com/jarun/nnn
- Stars: 19k+
- 语言: C
核心特点
- 极速文件管理器
- C 语言编写,速度极快
- 资源占用极低
- 插件丰富
# 安装
brew install nnn
# 运行
nnn
# 快捷键
↑/↓ 上/下
→ 进入目录
← 返回
Space 选择文件
. 切换隐藏文件
! 执行命令
3. lf ⭐⭐⭐⭐
- GitHub: https://github.com/gokcehan/lf
- Stars: 8k+
- 语言: Go
特点:ranger 的 Go 实现,更快
4. broot ⭐⭐⭐⭐⭐
- GitHub: https://github.com/Canop/broot
- Stars: 10k+
- 语言: Rust
特点:
- 模糊搜索目录
- 树状显示
- 快速导航
brew install broot
# 运行
br
# 使用
输入关键词 → 模糊匹配 → 选择 → cd
五、系统监控工具
1. btop ⭐⭐⭐⭐⭐
- GitHub: https://github.com/aristocratos/btop
- Stars: 20k+
- 语言: C++
详细介绍见 开发者效能工具
2. glances ⭐⭐⭐⭐⭐
- GitHub: https://github.com/nicolargo/glances
- Stars: 26k+
- 语言: Python
特点:
- 跨平台
- Web UI
- API 接口
- 插件系统
brew install glances
# 运行
glances
# Web 模式
glances -w
# 访问 http://localhost:61208
3. neofetch ⭐⭐⭐⭐⭐
- GitHub: https://github.com/dylanaraps/neofetch
- Stars: 22k+
特点:显示系统信息 + ASCII Logo
brew install neofetch
neofetch
六、网络工具
1. httpie ⭐⭐⭐⭐⭐
- GitHub: https://github.com/httpie/httpie
- Stars: 33k+
特点:人类友好的 HTTP 客户端
brew install httpie
# GET 请求
http https://api.github.com/users/octocat
# POST JSON
http POST https://httpbin.org/post name=John age:=30
# 下载文件
http --download https://example.com/file.zip
# 表单提交
http -f POST https://httpbin.org/post name=John
2. curlie ⭐⭐⭐⭐
- GitHub: https://github.com/rs/curlie
- Stars: 3k+
特点:curl 的 httpie 包装
brew install curlie
curlie https://api.github.com/users/octocat
3. bandwhich ⭐⭐⭐⭐⭐
- GitHub: https://github.com/imsnif/bandwhich
- Stars: 10k+
特点:网络带宽监控
brew install bandwhich
sudo bandwhich
七、生产力工具
1. fzf ⭐⭐⭐⭐⭐
- GitHub: https://github.com/junegunn/fzf
- Stars: 64k+
模糊搜索神器
brew install fzf
# 安装 Shell 集成
$(brew --prefix)/opt/fzf/install
# 快捷键
Ctrl+R 搜索历史命令
Ctrl+T 搜索文件
Alt+C 搜索目录
# 命令行使用
vim $(fzf) # 模糊搜索文件并用 vim 打开
cd $(find . -type d | fzf) # 模糊搜索目录并 cd
kill -9 $(ps aux | fzf | awk '{print $2}') # 模糊搜索进程并 kill
2. z / autojump ⭐⭐⭐⭐⭐
快速目录跳转
# z(内置于 oh-my-zsh)
z project # 跳转到最常访问的包含 "project" 的目录
# autojump
brew install autojump
j project
3. tldr ⭐⭐⭐⭐⭐
简化的命令示例
brew install tldr
tldr tar
tldr docker
tldr git-commit
4. cheat ⭐⭐⭐⭐
- GitHub: https://github.com/cheat/cheat
命令速查表
brew install cheat
cheat tar
cheat ssh
八、终端美化工具
1. Nerd Fonts
必装字体(支持图标)
# 推荐字体
brew install --cask font-jetbrains-mono-nerd-font
brew install --cask font-fira-code-nerd-font
brew install --cask font-meslo-lg-nerd-font
brew install --cask font-hack-nerd-font
# Powerlevel10k 推荐
brew install --cask font-meslo-lg-nerd-font
2. 配色方案
iTerm2 配色:
- https://iterm2colorschemes.com/
- Dracula
- Solarized Dark
- One Dark
- Nord
- Tokyo Night
九、脚本自动化工具
概述
本章节专注于帮助快速创建、管理和批量生产Shell脚本的工具,涵盖脚本框架、自动化调度、批量处理和脚本生成器等方面。
1. Shell脚本框架
1.1 Bashly ⭐⭐⭐⭐⭐
- GitHub: https://github.com/DannyBen/bashly
- Stars: 2k+
- 语言: Ruby
- 开源协议: MIT
核心特点:
- YAML配置生成Bash脚本
- 自动参数解析
- 自动补全生成
- 帮助文档生成
- 环境验证
安装:
gem install bashly
# 或
brew install bashly
快速开始:
# 创建项目
bashly init
# 生成示例配置
bashly add validations
bashly add config
配置文件示例(bashly.yml):
name: deploy
help: 部署工具
version: 1.0.0
environment_variables:
- name: api_key
help: API密钥
required: true
flags:
- long: --env
short: -e
arg: environment
help: 部署环境
allowed: [dev, staging, production]
default: dev
- long: --force
short: -f
help: 强制部署
- long: --dry-run
help: 模拟运行
commands:
- name: app
help: 部署应用
- name: database
alias: db
help: 数据库操作
commands:
- name: migrate
help: 运行数据库迁移
- name: backup
help: 备份数据库
flags:
- long: --output
short: -o
arg: path
help: 备份文件路径
required: true
examples:
- deploy app --env production
- deploy db migrate
- deploy db backup -o backup.sql
生成脚本:
# 生成脚本
bashly generate
# 生成完整版(包含验证函数等)
bashly generate --upgrade
生成的脚本用法:
./deploy app --env production
./deploy db migrate
./deploy db backup -o /tmp/backup.sql --dry-run
自定义函数(src/):
# src/app_command.sh
app_command() {
echo "部署应用到 ${args[--env]}"
if [[ ${args[--force]} ]]; then
echo "强制部署模式"
fi
if [[ ${args[--dry-run]} ]]; then
echo "模拟运行,不实际部署"
return
fi
# 实际部署逻辑
git pull origin main
npm run build
pm2 restart all
}
优势: ✅ YAML配置简单直观 ✅ 自动生成专业脚本 ✅ 参数验证和错误处理 ✅ 自动补全支持 ✅ 文档自动生成
劣势: ❌ 需要Ruby环境 ❌ 生成的脚本较大
1.2 argc ⭐⭐⭐⭐⭐
- GitHub: https://github.com/sigoden/argc
- Stars: 600+
- 语言: Rust
- 开源协议: MIT/Apache 2.0
核心特点:
- 注释即配置
- 无需额外文件
- 自动参数解析
- 支持子命令
- Shell补全生成
安装:
brew install sigoden/tap/argc
脚本示例:
#!/usr/bin/env bash
# @describe 批量图片处理工具
# @version 1.0.0
# @cmd 压缩图片
# @option -q --quality=<num\> 图片质量(1-100) @default(80)
# @option -o --output=<dir\> 输出目录 @required
# @arg input* 输入文件
compress() {
quality="${argc_quality:-80}"
output="${argc_output}"
for img in "${argc_input[@]}"; do
echo "压缩 $img (质量: $quality) -\> $output"
convert "$img" -quality "$quality" "$output/$(basename "$img")"
done
}
# @cmd 调整尺寸
# @option -w --width=<num\> 宽度 @required
# @option -h --height=<num\> 高度
# @arg input* 输入文件
resize() {
width="${argc_width}"
height="${argc_height:-}"
for img in "${argc_input[@]}"; do
if [[ -n "$height" ]]; then
convert "$img" -resize "${width}x${height}!" "resized_$(basename "$img")"
else
convert "$img" -resize "${width}" "resized_$(basename "$img")"
fi
done
}
# @cmd 添加水印
# @option -t --text=<str\> 水印文字 @required
# @option -p --position=<str\> 位置 @choice(center,top,bottom)
# @arg input* 输入文件
watermark() {
text="${argc_text}"
position="${argc_position:-center}"
for img in "${argc_input[@]}"; do
convert "$img" -gravity "$position" \
-pointsize 30 -fill white -annotate +0+0 "$text" \
"watermarked_$(basename "$img")"
done
}
eval "$(argc --argc-eval "$0" "$@")"
使用:
chmod +x image-tool.sh
# 查看帮助
./image-tool.sh --help
# 压缩图片
./image-tool.sh compress -o ./output -q 90 *.jpg
# 调整尺寸
./image-tool.sh resize -w 800 -h 600 photo.jpg
# 添加水印
./image-tool.sh watermark -t "Copyright 2025" -p bottom *.png
# 生成Shell补全
argc --argc-completions bash ./image-tool.sh
批量处理示例:
#!/usr/bin/env bash
# @describe 批量文件处理
# @cmd 批量重命名
# @option -p --prefix=<str\> 前缀
# @option -s --suffix=<str\> 后缀
# @flag -d --dry-run 仅预览
# @arg files+ 文件列表
rename() {
prefix="${argc_prefix:-}"
suffix="${argc_suffix:-}"
dry_run="${argc_dry_run:-}"
for file in "${argc_files[@]}"; do
dir=$(dirname "$file")
base=$(basename "$file")
name="${base%.*}"
ext="${base##*.}"
new_name="${prefix}${name}${suffix}.${ext}"
new_path="${dir}/${new_name}"
if [[ "$dry_run" == "1" ]]; then
echo "预览: $file -\> $new_path"
else
mv "$file" "$new_path"
echo "重命名: $file -\> $new_path"
fi
done
}
# @cmd 批量删除
# @option -e --extension=<str\> 文件扩展名
# @flag -r --recursive 递归删除
# @flag -f --force 强制删除
# @arg directory 目标目录
delete() {
ext="${argc_extension}"
recursive="${argc_recursive:-}"
force="${argc_force:-}"
dir="${argc_directory}"
if [[ "$recursive" == "1" ]]; then
find_cmd="find $dir -type f -name '*.$ext'"
else
find_cmd="find $dir -maxdepth 1 -type f -name '*.$ext'"
fi
eval "$find_cmd" | while read file; do
if [[ "$force" != "1" ]]; then
read -p "删除 $file? (y/N): " confirm
[[ "$confirm" != "y" ]] && continue
fi
rm "$file"
echo "已删除: $file"
done
}
eval "$(argc --argc-eval "$0" "$@")"
优势: ✅ 无需额外配置文件 ✅ 注释即文档 ✅ Rust编写,速度快 ✅ 学习成本低
1.3 getopts / getopt (内置)
Bash内置参数解析:
#!/bin/bash
# 传统的getopts方式
usage() {
cat << EOF
用法: $0 [选项] 文件...
选项:
-h 显示帮助
-v 详细输出
-o FILE 输出文件
-n NUM 处理数量
EOF
exit 1
}
# 默认值
verbose=0
output=""
count=10
# 解析参数
while getopts "hvo:n:" opt; do
case $opt in
h) usage ;;
v) verbose=1 ;;
o) output="$OPTARG" ;;
n) count="$OPTARG" ;;
\?) usage ;;
esac
done
shift $((OPTIND-1))
# 剩余参数
files=("$@")
# 脚本逻辑
if [[ $verbose -eq 1 ]]; then
echo "详细模式启用"
echo "输出文件: ${output:-标准输出}"
echo "处理数量: $count"
echo "输入文件: ${files[*]}"
fi
高级getopt(支持长选项):
#!/bin/bash
# 使用GNU getopt
TEMP=$(getopt -o 'hvo:n:' \
--long 'help,verbose,output:,number:,dry-run' \
-n "$0" -- "$@")
if [ $? -ne 0 ]; then
echo '参数解析失败' \>&2
exit 1
fi
eval set -- "$TEMP"
unset TEMP
# 默认值
verbose=false
output=""
number=0
dry_run=false
# 解析
while true; do
case "$1" in
'-h'|'--help')
echo "帮助信息"
exit 0
;;
'-v'|'--verbose')
verbose=true
shift
;;
'-o'|'--output')
output="$2"
shift 2
;;
'-n'|'--number')
number="$2"
shift 2
;;
'--dry-run')
dry_run=true
shift
;;
'--')
shift
break
;;
*)
echo '内部错误!' \>&2
exit 1
;;
esac
done
# 使用参数
echo "Verbose: $verbose"
echo "Output: $output"
echo "Number: $number"
echo "Dry run: $dry_run"
echo "剩余参数: $@"
2. 任务调度工具
2.1 launchd(macOS原生)⭐⭐⭐⭐⭐
核心特点:
- macOS系统级任务调度
- 替代cron
- 支持复杂触发条件
- 开机自启动
配置文件位置:
# 系统级(需要sudo)
/Library/LaunchDaemons/
# 用户级
~/Library/LaunchAgents/
示例配置(com.example.backup.plist):
\<?xml version="1.0" encoding="UTF-8"?\>
\<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
"http://www.apple.com/DTDs/PropertyList-1.0.dtd"\>
\<plist version="1.0"\>
<dict\>
<!-- 任务标识 --\>
<key\>Label</key\>
<string\>com.example.backup</string\>
<!-- 执行的程序 --\>
<key\>ProgramArguments</key\>
<array\>
<string\>/usr/local/bin/backup.sh</string\>
<string\>--output</string\>
<string\>/Volumes/Backup</string\>
</array\>
<!-- 定时执行 --\>
<key\>StartCalendarInterval</key\>
<dict\>
<!-- 每天凌晨2点 --\>
<key\>Hour</key\>
<integer\>2</integer\>
<key\>Minute</key\>
<integer\>0</integer\>
</dict\>
<!-- 工作目录 --\>
<key\>WorkingDirectory</key\>
<string\>/Users/username/backups</string\>
<!-- 日志 --\>
<key\>StandardOutPath</key\>
<string\>/tmp/backup.log</string\>
<key\>StandardErrorPath</key\>
<string\>/tmp/backup_error.log</string\>
<!-- 环境变量 --\>
<key\>EnvironmentVariables</key\>
<dict\>
<key\>PATH</key\>
<string\>/usr/local/bin:/usr/bin:/bin</string\>
</dict\>
</dict\>
</plist\>
更多触发条件示例:
<!-- 每周一早上9点 --\>
<key\>StartCalendarInterval</key\>
<dict\>
<key\>Weekday</key\>
<integer\>1</integer\>
<key\>Hour</key\>
<integer\>9</integer\>
<key\>Minute</key\>
<integer\>0</integer\>
</dict\>
<!-- 每小时的第30分钟 --\>
<key\>StartCalendarInterval</key\>
<dict\>
<key\>Minute</key\>
<integer\>30</integer\>
</dict\>
\<!-- 每5分钟运行一次(多个时间) --\>
<key\>StartCalendarInterval</key\>
<array\>
<dict\><key\>Minute</key\><integer\>0</integer\></dict\>
<dict\><key\>Minute</key\><integer\>5</integer\></dict\>
<dict\><key\>Minute</key\><integer\>10</integer\></dict\>
<dict\><key\>Minute</key\><integer\>15</integer\></dict\>
<!-- ... --\>
</array\>
<!-- 文件变化触发 --\>
<key\>WatchPaths</key\>
<array\>
<string\>/path/to/watch</string\>
</array\>
<!-- 目录变化触发 --\>
<key\>QueueDirectories</key\>
<array\>
<string\>/path/to/queue</string\>
</array\>
管理命令:
# 加载任务
launchctl load ~/Library/LaunchAgents/com.example.backup.plist
# 卸载任务
launchctl unload ~/Library/LaunchAgents/com.example.backup.plist
# 启动任务
launchctl start com.example.backup
# 停止任务
launchctl stop com.example.backup
# 查看任务状态
launchctl list | grep com.example
# 查看任务详情
launchctl print gui/501/com.example.backup
实用脚本模板:
#!/bin/bash
# backup.sh - 配合launchd使用的备份脚本
set -e # 遇到错误立即退出
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*"
}
log "开始备份..."
# 备份逻辑
SOURCE="/Users/username/Documents"
DEST="${1:-/Volumes/Backup}"
DATE=$(date '+%Y%m%d_%H%M%S')
# 创建备份目录
mkdir -p "$DEST/backup_$DATE"
# 使用rsync备份
rsync -av --progress "$SOURCE/" "$DEST/backup_$DATE/"
# 清理旧备份(保留最近7天)
find "$DEST" -name "backup_*" -type d -mtime +7 -exec rm -rf {} +
log "备份完成"
2.2 cronie ⭐⭐⭐⭐
brew install cronie
# 编辑crontab
crontab -e
# 示例
# 每天凌晨2点备份
0 2 * * * /usr/local/bin/backup.sh
# 每小时清理临时文件
0 * * * * rm -rf /tmp/cache/*
# 每周一早上9点发送报告
0 9 * * 1 /usr/local/bin/send-report.sh
2.3 Task Spooler (ts) ⭐⭐⭐⭐
核心特点:
- 任务队列管理
- 并行控制
- 任务依赖
brew install task-spooler
# 添加任务
ts ./long-task.sh
ts sleep 100
# 查看任务
ts -l
# 等待所有任务完成
ts -w
# 并行限制(最多3个并行)
ts -S 3
# 任务依赖
ID=$(ts ./first-task.sh)
ts -D $ID ./second-task.sh # 等first-task完成后执行
3. 批量处理工具
3.1 GNU Parallel ⭐⭐⭐⭐⭐
核心特点:
- 并行执行命令
- 自动任务分配
- 支持远程执行
- 断点续传
brew install parallel
# 基础用法
parallel echo ::: A B C D
# 输出: A B C D (并行)
# 批量处理文件
parallel convert {} -resize 50% small_{} ::: *.jpg
# 批量重命名
ls *.txt | parallel mv {} {.}.md
# 并行下载
cat urls.txt | parallel -j 5 wget {}
# 批量压缩图片
find . -name "*.jpg" | parallel -j 4 \
'convert {} -quality 80 optimized/{/}'
# 批量视频转换
ls *.mov | parallel -j 2 \
'ffmpeg -i {} -c:v libx264 {.}.mp4'
# 批量运行脚本
parallel -j 10 './process.sh {}' ::: user1 user2 user3
# SSH远程批量执行
parallel -S server1,server2,server3 \
'ssh {} "uptime"'
# 进度显示
parallel --progress convert {} thumb_{} ::: *.jpg
# 保持顺序
parallel -k echo ::: 3 1 2 # 输出: 3 1 2
# 从文件读取
parallel -a tasks.txt ./process.sh
# 断点续传
parallel --resume --joblog log.txt command ::: inputs
实用示例:
批量图片处理:
#!/bin/bash
# batch-image-process.sh
INPUT_DIR="./images"
OUTPUT_DIR="./processed"
mkdir -p "$OUTPUT_DIR"
# 批量压缩
find "$INPUT_DIR" -name "*.jpg" -o -name "*.png" | \
parallel -j 4 --progress \
'convert {} -resize 800x600 -quality 85 '"$OUTPUT_DIR"'/{/}'
echo "处理完成!"
批量代码格式化:
#!/bin/bash
# format-all.sh
# 批量格式化JavaScript文件
find ./src -name "*.js" | parallel -j 8 \
'prettier --write {}'
# 批量格式化Python文件
find ./src -name "*.py" | parallel -j 8 \
'black {}'
批量测试:
#!/bin/bash
# run-all-tests.sh
# 并行运行所有测试文件
find ./tests -name "test_*.py" | \
parallel -j 4 --tag \
'python {}'
3.2 xargs (内置) ⭐⭐⭐⭐
# 批量删除
find . -name "*.tmp" | xargs rm
# 批量移动
ls *.txt | xargs -I {} mv {} backup/
# 批量处理(限制并行数)
find . -name "*.jpg" | xargs -P 4 -I {} convert {} -resize 50% {}
# 交互确认
find . -name "*.log" | xargs -p rm
# 处理文件名中的空格
find . -name "*.txt" -print0 | xargs -0 wc -l
3.3 fd + xargs/parallel组合 ⭐⭐⭐⭐⭐
# fd更快更友好的find替代
brew install fd
# 批量处理
fd -e jpg -x convert {} -resize 800 {}
# 结合parallel
fd -e js | parallel -j 8 'eslint --fix {}'
# 批量重命名
fd -e txt -x mv {} {.}.md
4. 脚本生成器与AI工具
4.1 aichat ⭐⭐⭐⭐⭐
- GitHub: https://github.com/sigoden/aichat
- Stars: 4k+
核心特点:
- 命令行AI助手
- 支持多种AI模型
- 脚本生成
- 命令解释
brew install aichat
# 生成脚本
aichat "写一个批量重命名文件的bash脚本"
# 解释命令
aichat "解释这个命令: find . -name '*.log' -mtime +7 -delete"
# Shell集成
aichat --role shell "如何批量压缩目录下的所有图片"
# 代码审查
cat script.sh | aichat "检查这个脚本的问题"
4.2 LLM CLI ⭐⭐⭐⭐
- GitHub: https://github.com/simonw/llm
pip install llm
# 生成脚本
llm "创建一个监控CPU使用率的bash脚本"
# 解释错误
cat error.log | llm "分析这个错误"
# 代码优化
cat slow-script.sh | llm "优化这个脚本的性能"
4.3 GitHub Copilot CLI ⭐⭐⭐⭐⭐
npm install -g @githubnext/github-copilot-cli
# 解释命令
github-copilot-cli what-the-shell "查找大于100MB的文件"
# 生成命令
github-copilot-cli git-assist "撤销最后一次提交但保留更改"
5. 实用脚本模板库
5.1 批量文件处理模板
#!/bin/bash
# batch-process-template.sh
# 通用批量处理模板
set -euo pipefail # 严格模式
# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
NC='\033[0m'
log_info() { echo -e "${GREEN}[INFO]${NC} $*"; }
log_error() { echo -e "${RED}[ERROR]${NC} $*" \>&2; }
# 配置
INPUT_DIR="${1:-.}"
OUTPUT_DIR="${2:-./output}"
PARALLEL_JOBS=4
DRY_RUN=false
# 解析参数
while [[ $# -gt 0 ]]; do
case $1 in
-i|--input) INPUT_DIR="$2"; shift 2 ;;
-o|--output) OUTPUT_DIR="$2"; shift 2 ;;
-j|--jobs) PARALLEL_JOBS="$2"; shift 2 ;;
--dry-run) DRY_RUN=true; shift ;;
*) shift ;;
esac
done
# 创建输出目录
mkdir -p "$OUTPUT_DIR"
# 处理单个文件的函数
process_file() {
local input="$1"
local filename=$(basename "$input")
local output="$OUTPUT_DIR/$filename"
log_info "处理: $input"
if [[ "$DRY_RUN" == true ]]; then
echo "模拟: $input -\> $output"
return
fi
# 在这里添加实际处理逻辑
# 例如: convert "$input" -resize 800x600 "$output"
log_info "完成: $output"
}
# 导出函数供parallel使用
export -f process_file log_info log_error
export OUTPUT_DIR DRY_RUN RED GREEN NC
# 查找并并行处理文件
find "$INPUT_DIR" -type f \( -name "*.jpg" -o -name "*.png" \) | \
parallel -j "$PARALLEL_JOBS" --progress process_file {}
log_info "所有文件处理完成!"
5.2 安全备份模板
#!/bin/bash
# safe-backup-template.sh
# 安全备份模板 (增量备份 + 压缩 + 验证)
set -euo pipefail
# 配置
BACKUP_SOURCE="/path/to/source"
BACKUP_DEST="/path/to/backup"
BACKUP_NAME="backup_$(date +%Y%m%d_%H%M%S)"
RETENTION_DAYS=30
LOG_FILE="/var/log/backup.log"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $*" | tee -a "$LOG_FILE"
}
# 错误处理
trap 'log "错误: 脚本执行失败 (行号: $LINENO)"' ERR
# 检查源目录
if [[ ! -d "$BACKUP_SOURCE" ]]; then
log "错误: 源目录不存在: $BACKUP_SOURCE"
exit 1
fi
# 创建备份目录
mkdir -p "$BACKUP_DEST"
log "开始备份: $BACKUP_SOURCE -\> $BACKUP_DEST/$BACKUP_NAME"
# 使用rsync进行增量备份
rsync -avz \
--delete \
--link-dest="$BACKUP_DEST/latest" \
"$BACKUP_SOURCE/" \
"$BACKUP_DEST/$BACKUP_NAME/"
# 更新latest链接
ln -snf "$BACKUP_NAME" "$BACKUP_DEST/latest"
# 压缩备份
log "压缩备份..."
tar -czf "$BACKUP_DEST/$BACKUP_NAME.tar.gz" \
-C "$BACKUP_DEST" "$BACKUP_NAME"
# 验证压缩文件
if tar -tzf "$BACKUP_DEST/$BACKUP_NAME.tar.gz" \> /dev/null; then
log "备份验证成功"
# 删除未压缩的目录
rm -rf "$BACKUP_DEST/$BACKUP_NAME"
else
log "错误: 备份验证失败"
exit 1
fi
# 清理旧备份
log "清理旧备份..."
find "$BACKUP_DEST" -name "backup_*.tar.gz" -mtime "+$RETENTION_DAYS" -delete
# 统计
BACKUP_SIZE=$(du -sh "$BACKUP_DEST/$BACKUP_NAME.tar.gz" | cut -f1)
TOTAL_BACKUPS=$(find "$BACKUP_DEST" -name "backup_*.tar.gz" | wc -l)
log "备份完成!"
log "备份大小: $BACKUP_SIZE"
log "现有备份数: $TOTAL_BACKUPS"
5.3 系统监控模板
#!/bin/bash
# system-monitor-template.sh
# 系统监控并发送告警
# 阈值配置
CPU_THRESHOLD=80
MEMORY_THRESHOLD=85
DISK_THRESHOLD=90
# 通知配置
NOTIFICATION_EMAIL="admin@example.com"
SLACK_WEBHOOK="https://hooks.slack.com/services/xxx"
# 获取系统指标
get_cpu_usage() {
top -l 1 | grep "CPU usage" | awk '{print $3}' | sed 's/%//'
}
get_memory_usage() {
vm_stat | perl -ne '/page size of (\d+)/ and $size=$1; /Pages\s+([^:]+)[^\d]+(\d+)/ and printf("%-16s % 16.2f Mi\n", "$1:", $2 * $size / 1048576);' | awk '/wired/ || /active/ {sum+=$2} END {printf "%.0f", sum/1024*100/16}' # 示例,需根据实际调整
}
get_disk_usage() {
df -h / | awk 'NR==2 {print $5}' | sed 's/%//'
}
# 发送告警
send_alert() {
local message="$1"
# 系统通知
osascript -e "display notification \"$message\" with title \"系统告警\""
# Slack通知
if [[ -n "$SLACK_WEBHOOK" ]]; then
curl -X POST "$SLACK_WEBHOOK" \
-H 'Content-Type: application/json' \
-d "{\"text\": \"$message\"}"
fi
}
# 检查指标
check_metrics() {
local cpu=$(get_cpu_usage)
local memory=$(get_memory_usage)
local disk=$(get_disk_usage)
echo "CPU: ${cpu}% | Memory: ${memory}% | Disk: ${disk}%"
if (( $(echo "$cpu \> $CPU_THRESHOLD" | bc -l) )); then
send_alert "CPU使用率过高: ${cpu}%"
fi
if (( $(echo "$memory \> $MEMORY_THRESHOLD" | bc -l) )); then
send_alert "内存使用率过高: ${memory}%"
fi
if (( $(echo "$disk \> $DISK_THRESHOLD" | bc -l) )); then
send_alert "磁盘使用率过高: ${disk}%"
fi
}
# 主循环
while true; do
check_metrics
sleep 300 # 每5分钟检查一次
done
5.4 Git批量操作模板
#!/bin/bash
# git-bulk-operations.sh
# 批量Git仓库操作
REPOS_DIR="${1:-$HOME/projects}"
# 遍历所有Git仓库
find "$REPOS_DIR" -name ".git" -type d | while read gitdir; do
repo=$(dirname "$gitdir")
echo "=== $repo ==="
cd "$repo" || continue
# 获取当前分支
branch=$(git rev-parse --abbrev-ref HEAD)
# 检查未提交更改
if ! git diff-index --quiet HEAD --; then
echo " ⚠️ 有未提交的更改"
fi
# 拉取最新代码
git pull origin "$branch" 2\\>&1 | sed 's/^/ /'
# 清理已合并分支
git branch --merged | grep -v "\*" | grep -v "main" | grep -v "master" | xargs -r git branch -d
echo ""
done
6. 脚本管理工具
6.1 Scriptisto ⭐⭐⭐⭐
核心特点:
- 脚本依赖管理
- 自动编译
- 语言无关
brew install scriptisto
# Python脚本示例
#!/usr/bin/env scriptisto
# scriptisto-begin
# script_src: main.py
# build_cmd: pip install -r requirements.txt
# scriptisto-end
import requests
print(requests.get('https://api.github.com').json())
6.2 direnv ⭐⭐⭐⭐⭐
- GitHub: https://github.com/direnv/direnv
- Stars: 12k+
核心特点:
- 目录级环境变量
- 自动加载.envrc
brew install direnv
# Zsh集成
echo 'eval "$(direnv hook zsh)"' \>\> ~/.zshrc
# 项目目录
cd ~/project
cat \> .envrc << 'EOF'
export DATABASE_URL="postgresql://localhost/mydb"
export API_KEY="secret"
export PATH=$PWD/bin:$PATH
EOF
# 授权
direnv allow
7. 实用脚本生成快捷方式
7.1 Shell别名快速生成脚本
# 添加到 ~/.zshrc 或 ~/.bashrc
# 快速创建脚本
mkscript() {
local name="${1:-script.sh}"
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail
# 脚本逻辑
echo "Hello, World!"
SCRIPT
chmod +x "$name"
echo "已创建脚本: $name"
}
# 快速创建批处理脚本
mkbatch() {
local name="${1:-batch.sh}"
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail
# 批处理模板
INPUT_DIR="${1:-.}"
OUTPUT_DIR="${2:-./output}"
mkdir -p "$OUTPUT_DIR"
find "$INPUT_DIR" -type f | while read file; do
echo "处理: $file"
# 添加处理逻辑
done
echo "完成!"
SCRIPT
chmod +x "$name"
echo "已创建批处理脚本: $name"
}
# 快速创建定时任务
mkcron() {
local name="${1:-task.sh}"
local schedule="${2:-0 2 * * *}"
# 创建脚本
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail
# 定时任务逻辑
echo "[$(date)] 任务执行" \>\> /tmp/cron.log
SCRIPT
chmod +x "$name"
# 添加到crontab
(crontab -l 2\\>/dev/null; echo "$schedule $(pwd)/$name") | crontab -
echo "已创建定时任务: $schedule $name"
}
使用:
# 创建普通脚本
mkscript my-tool.sh
# 创建批处理脚本
mkbatch image-processor.sh
# 创建定时任务(每天凌晨2点)
mkcron backup.sh "0 2 * * *"
8. 综合示例:生产级批处理工具
#!/usr/bin/env bash
# @describe 生产级图片批处理工具
# @version 2.0.0
# @author Your Name
set -euo pipefail
# 颜色定义
readonly RED='\033[0;31m'
readonly GREEN='\033[0;32m'
readonly YELLOW='\033[1;33m'
readonly NC='\033[0m'
# 默认配置
readonly DEFAULT_QUALITY=85
readonly DEFAULT_JOBS=4
readonly LOG_FILE="/tmp/image-batch-$(date +%s).log"
# 日志函数
log() { echo -e "${GREEN}[$(date '+%H:%M:%S')]${NC} $*" | tee -a "$LOG_FILE"; }
warn() { echo -e "${YELLOW}[WARN]${NC} $*" | tee -a "$LOG_FILE"; }
error() { echo -e "${RED}[ERROR]${NC} $*" | tee -a "$LOG_FILE" \>&2; }
# 错误处理
trap 'error "脚本执行失败 (行: $LINENO, 命令: $BASH_COMMAND)"' ERR
# @cmd 批量压缩图片
# @option -i --input=<dir\> 输入目录 @required
# @option -o --output=<dir\> 输出目录 @required
# @option -q --quality=\\<1-100\\> 图片质量 @default(85)
# @option -j --jobs=<num\> 并行任务数 @default(4)
# @flag -r --recursive 递归处理子目录
# @flag --dry-run 仅预览,不实际处理
compress() {
local input="${argc_input}"
local output="${argc_output}"
local quality="${argc_quality:-$DEFAULT_QUALITY}"
local jobs="${argc_jobs:-$DEFAULT_JOBS}"
local recursive="${argc_recursive:-}"
local dry_run="${argc_dry_run:-}"
# 验证
[[ ! -d "$input" ]] && { error "输入目录不存在: $input"; exit 1; }
# 创建输出目录
[[ "$dry_run" != "1" ]] && mkdir -p "$output"
# 构建find命令
local find_cmd="find '$input'"
[[ "$recursive" != "1" ]] && find_cmd+=" -maxdepth 1"
find_cmd+=" -type f \( -name '*.jpg' -o -name '*.png' -o -name '*.jpeg' \)"
log "开始批量压缩..."
log "输入: $input"
log "输出: $output"
log "质量: $quality"
log "并行: $jobs"
# 定义处理函数
process_image() {
local img="$1"
local quality="$2"
local output_dir="$3"
local dry_run="$4"
local filename=$(basename "$img")
local output_path="$output_dir/$filename"
if [[ "$dry_run" == "1" ]]; then
echo "预览: $img -\> $output_path (质量: $quality)"
else
convert "$img" -quality "$quality" "$output_path" 2\\>/dev/null && \
echo "✓ $filename" || echo "✗ $filename 失败"
fi
}
export -f process_image
# 并行处理
local file_count=$(eval "$find_cmd" | wc -l | tr -d ' ')
log "找到 $file_count 个文件"
eval "$find_cmd" | \
parallel -j "$jobs" --progress --bar \
process_image {} "$quality" "$output" "$dry_run"
log "处理完成!"
log "日志文件: $LOG_FILE"
}
# @cmd 批量添加水印
# @option -i --input=<dir\> 输入目录 @required
# @option -o --output=<dir\> 输出目录 @required
# @option -t --text=<str\> 水印文字 @required
# @option -p --position=<str\> 位置 @choice(center,northeast,southeast,southwest,northwest) @default(southeast)
# @option -s --size=<num\> 字体大小 @default(30)
# @option -j --jobs=<num\> 并行数 @default(4)
watermark() {
local input="${argc_input}"
local output="${argc_output}"
local text="${argc_text}"
local position="${argc_position:-southeast}"
local size="${argc_size:-30}"
local jobs="${argc_jobs:-4}"
mkdir -p "$output"
log "批量添加水印..."
find "$input" -type f \( -name "*.jpg" -o -name "*.png" \) | \
parallel -j "$jobs" --progress \
convert {} -gravity "$position" \
-pointsize "$size" -fill white \
-annotate +10+10 "$text" \
"$output/{/}"
log "完成!"
}
# @cmd 批量调整尺寸
# @option -i --input=<dir\> 输入目录 @required
# @option -o --output=<dir\> 输出目录 @required
# @option -w --width=<num\> 宽度
# @option -h --height=<num\> 高度
# @option -p --percentage=<num\> 缩放百分比
# @option -j --jobs=<num\> 并行数 @default(4)
resize() {
local input="${argc_input}"
local output="${argc_output}"
local width="${argc_width:-}"
local height="${argc_height:-}"
local percentage="${argc_percentage:-}"
local jobs="${argc_jobs:-4}"
mkdir -p "$output"
# 确定resize参数
local resize_param=""
if [[ -n "$percentage" ]]; then
resize_param="${percentage}%"
elif [[ -n "$width" && -n "$height" ]]; then
resize_param="${width}x${height}!"
elif [[ -n "$width" ]]; then
resize_param="${width}"
else
error "必须指定宽度、高度或百分比"
exit 1
fi
log "批量调整尺寸: $resize_param"
find "$input" -type f \( -name "*.jpg" -o -name "*.png" \) | \
parallel -j "$jobs" --progress \
convert {} -resize "$resize_param" "$output/{/}"
log "完成!"
}
# argc框架
eval "$(argc --argc-eval "$0" "$@")"
使用示例:
chmod +x image-tool.sh
# 批量压缩
./image-tool.sh compress -i ./photos -o ./compressed -q 80 -j 8
# 预览模式
./image-tool.sh compress -i ./photos -o ./compressed --dry-run
# 递归处理
./image-tool.sh compress -i ./photos -o ./compressed -r
# 添加水印
./image-tool.sh watermark -i ./photos -o ./watermarked \
-t "© 2025" -p southeast -s 40
# 批量缩放
./image-tool.sh resize -i ./photos -o ./resized -p 50
./image-tool.sh resize -i ./photos -o ./resized -w 800 -h 600
9. 总结与最佳实践
工具选择建议
| 需求 | 推荐工具 | 理由 |
|---|---|---|
| 快速创建CLI工具 | argc | 注释即配置,简单快速 |
| 复杂CLI工具 | Bashly | 功能完整,专业 |
| 批量并行处理 | GNU Parallel | 强大且成熟 |
| 任务调度 | launchd | macOS原生,稳定 |
| 脚本生成 | AI工具(aichat) | 快速高效 |
| 环境管理 | direnv | 项目隔离 |
脚本编写最佳实践
- 严格模式: 始终使用
set -euo pipefail - 错误处理: 使用
trap捕获错误 - 日志记录: 输出带时间戳的日志
- 参数验证: 验证所有输入参数
- 幂等性: 脚本可重复执行
- 进度提示: 长时间任务显示进度
- 并行处理: 合理使用parallel加速
- 测试: 先用--dry-run测试
- 文档: 清晰的帮助信息
- 版本控制: 脚本也要用Git管理
批量生产脚本workflow
# 1. 使用AI快速生成基础脚本
aichat "创建一个批量图片处理工具"
# 2. 添加argc注释规范化参数
# (编辑脚本添加 @cmd, @option等注释)
# 3. 测试
./script.sh --help
./script.sh compress --dry-run -i test -o output
# 4. 使用parallel加速
# (在处理循环中使用parallel替代for)
# 5. 添加launchd自动化
# (创建plist文件实现定时执行)
# 6. 版本控制
git add script.sh
git commit -m "feat: add batch image processing tool"
十、小众与特定领域工具
1. 音视频处理工具
FFmpeg - 音视频处理瑞士军刀
安装:
brew install ffmpeg
核心功能:
- 视频格式转换、压缩、剪辑
- 音频提取、混音、降噪
- 字幕添加、水印添加
- 流媒体处理
常用命令:
# 视频压缩
ffmpeg -i input.mp4 -c:v libx264 -crf 23 -c:a aac -b:a 128k output.mp4
# 提取音频
ffmpeg -i video.mp4 -vn -acodec libmp3lame -q:a 2 audio.mp3
# 视频剪辑
ffmpeg -i input.mp4 -ss 00:00:30 -t 00:01:00 -c copy output.mp4
# 批量转换
for file in *.avi; do
ffmpeg -i "$file" -c:v libx264 "${file%.avi}.mp4"
done
# 添加水印
ffmpeg -i input.mp4 -i logo.png -filter_complex \
"overlay=W-w-10:H-h-10" output.mp4
# 合并视频
ffmpeg -f concat -safe 0 -i filelist.txt -c copy output.mp4
# 生成GIF
ffmpeg -i video.mp4 -vf "fps=10,scale=320:-1" output.gif
# 视频截图
ffmpeg -i video.mp4 -ss 00:00:05 -vframes 1 screenshot.jpg
ImageMagick - 图片处理专家
安装:
brew install imagemagick
常用命令:
# 批量压缩
find . -name "*.jpg" | parallel -j 4 \
'convert {} -quality 80 compressed/{/}'
# 批量缩放
mogrify -resize 50% *.jpg
# 添加水印
convert input.jpg -gravity southeast \
-pointsize 30 -fill white -annotate +10+10 "© 2025" output.jpg
# 批量格式转换
mogrify -format png *.jpg
# 图片拼接
convert img1.jpg img2.jpg img3.jpg +append horizontal.jpg
convert img1.jpg img2.jpg img3.jpg -append vertical.jpg
# 生成缩略图
convert -thumbnail 200x200 input.jpg thumb.jpg
yt-dlp - YouTube下载工具
安装:
brew install yt-dlp
常用命令:
# 下载最高质量视频
yt-dlp <URL\>
# 下载音频
yt-dlp -x --audio-format mp3 <URL\>
# 下载字幕
yt-dlp --write-sub --sub-lang en <URL\>
# 批量下载
yt-dlp -a urls.txt
# 下载播放列表
yt-dlp -f 'bestvideo+bestaudio' --yes-playlist <URL\>
2. 网络分析工具
nmap - 网络扫描神器
安装:
brew install nmap
常用命令:
# 扫描主机端口
nmap 192.168.1.1
# 扫描整个网段
nmap 192.168.1.0/24
# 检测操作系统
nmap -O 192.168.1.1
# 扫描特定端口
nmap -p 80,443,3306 192.168.1.1
# 服务版本检测
nmap -sV 192.168.1.1
# 快速扫描
nmap -F 192.168.1.1
mtr - 网络诊断工具
安装:
brew install mtr
使用:
# 实时路由追踪
mtr google.com
# 报告模式
mtr --report --report-cycles 10 google.com
# TCP模式
mtr --tcp --port 443 google.com
tcpdump - 数据包捕获
使用:
# 抓取特定端口
sudo tcpdump -i en0 port 80
# 抓取特定主机
sudo tcpdump -i en0 host 192.168.1.1
# 保存到文件
sudo tcpdump -i en0 -w capture.pcap
# 只抓取HTTP请求
sudo tcpdump -i en0 -A 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<\\<2)) - ((tcp[12]&0xf0)\>\>2)) != 0)'
bandwhich - 带宽监控
安装:
brew install bandwhich
使用:
sudo bandwhich
3. 数据处理工具
jq - JSON处理器
安装:
brew install jq
常用命令:
# 格式化JSON
cat data.json | jq '.'
# 提取字段
cat data.json | jq '.users[].name'
# 过滤数据
cat data.json | jq '.users[] | select(.age \> 18)'
# 统计数组长度
cat data.json | jq '.users | length'
# 转换数据
cat data.json | jq '.users[] | {name, email}'
# 多个JSON文件合并
jq -s '.[0] * .[1]' file1.json file2.json
# 从API获取并处理
curl -s https://api.github.com/users/octocat | jq '.name'
yq - YAML/JSON处理器
安装:
brew install yq
常用命令:
# 读取YAML
yq '.database.host' config.yaml
# 修改YAML
yq -i '.database.port = 3306' config.yaml
# YAML转JSON
yq -o json config.yaml
# JSON转YAML
yq -P data.json \> data.yaml
# 合并YAML文件
yq eval-all 'select(fileIndex == 0) * select(fileIndex == 1)' \
file1.yaml file2.yaml
miller (mlr) - CSV/JSON处理
安装:
brew install miller
常用命令:
# CSV转JSON
mlr --icsv --ojson cat data.csv
# JSON转CSV
mlr --ijson --ocsv cat data.json
# 筛选列
mlr --csv cut -f name,age data.csv
# 过滤行
mlr --csv filter '$age \> 18' data.csv
# 统计
mlr --csv stats1 -a mean,sum -f age data.csv
# 排序
mlr --csv sort -f age data.csv
csvkit - CSV工具集
安装:
brew install csvkit
常用命令:
# CSV转JSON
csvjson data.csv
# 查看CSV统计
csvstat data.csv
# SQL查询CSV
csvsql --query "SELECT name, age FROM data WHERE age \> 18" data.csv
# 合并CSV
csvstack file1.csv file2.csv \> merged.csv
# 提取列
csvcut -c name,age data.csv
4. 容器与云工具
dive - Docker镜像分析
安装:
brew install dive
使用:
# 分析镜像
dive nginx:latest
# 查看镜像每层大小
dive nginx:latest --ci
ctop - 容器监控
安装:
brew install ctop
使用:
ctop
lazydocker - Docker TUI管理器
安装:
brew install lazydocker
使用:
lazydocker
aws-cli - AWS命令行工具
安装:
brew install awscli
常用命令:
# 配置
aws configure
# S3操作
aws s3 ls
aws s3 cp file.txt s3://bucket/
aws s3 sync ./local s3://bucket/
# EC2操作
aws ec2 describe-instances
aws ec2 start-instances --instance-ids i-xxxxx
aws ec2 stop-instances --instance-ids i-xxxxx
# Lambda
aws lambda list-functions
aws lambda invoke --function-name MyFunction output.json
5. 密码与安全工具
pass - Unix密码管理器
安装:
brew install pass
使用:
# 初始化
pass init your-gpg-id
# 添加密码
pass insert Email/gmail
# 查看密码
pass Email/gmail
# 生成密码
pass generate Email/outlook 20
# 列出所有密码
pass
# 删除密码
pass rm Email/gmail
1password-cli - 1Password命令行
安装:
brew install --cask 1password-cli
使用:
# 登录
op signin
# 列出项目
op item list
# 获取密码
op item get "GitHub" --fields password
# 创建项目
op item create --category=login \
--title="Example" \
--vault="Personal" \
username=user@example.com
gpg - 加密工具
安装:
brew install gnupg
常用命令:
# 生成密钥
gpg --gen-key
# 加密文件
gpg -e -r recipient@example.com file.txt
# 解密文件
gpg -d file.txt.gpg \> file.txt
# 签名文件
gpg --sign file.txt
# 验证签名
gpg --verify file.txt.sig
6. 数据库工具
redis-cli - Redis命令行
安装:
brew install redis
常用命令:
# 连接
redis-cli
# 远程连接
redis-cli -h host -p 6379 -a password
# 执行命令
redis-cli SET key "value"
redis-cli GET key
# 批量操作
redis-cli --pipe < commands.txt
# 监控
redis-cli MONITOR
# 性能测试
redis-cli --latency
redis-cli --stat
mongosh - MongoDB Shell
安装:
brew install mongosh
使用:
# 连接
mongosh "mongodb://localhost:27017"
# 使用数据库
use mydb
# 查询
db.users.find()
db.users.find({age: {$gt: 18}})
# 插入
db.users.insertOne({name: "John", age: 30})
# 更新
db.users.updateOne({name: "John"}, {$set: {age: 31}})
7. 性能分析工具
hyperfine - 命令行基准测试
安装:
brew install hyperfine
使用:
# 比较命令性能
hyperfine 'grep pattern file' 'rg pattern file'
# 多次运行
hyperfine --runs 100 'my-command'
# 预热
hyperfine --warmup 3 'my-command'
# 导出结果
hyperfine --export-json results.json 'command1' 'command2'
flamegraph - 火焰图生成
安装:
brew install flamegraph
使用:
# 生成CPU火焰图
sudo dtrace -x ustackframes=100 -n \
'profile-997 /pid == $target/ { @[ustack()] = count(); }' \
-p <PID\> -o out.stacks
stackcollapse.pl out.stacks | flamegraph.pl \> flame.svg
8. 文本处理工具
pandoc - 文档格式转换
安装:
brew install pandoc
常用命令:
# Markdown转PDF
pandoc input.md -o output.pdf
# Markdown转Word
pandoc input.md -o output.docx
# HTML转Markdown
pandoc input.html -o output.md
# 批量转换
for file in *.md; do
pandoc "$file" -o "${file%.md}.pdf"
done
recode - 编码转换
安装:
brew install recode
使用:
# GBK转UTF-8
recode gbk..utf8 file.txt
# 批量转换
find . -name "*.txt" -exec recode gbk..utf8 {} \;
9. 系统工具
ncdu - 磁盘分析
安装:
brew install ncdu
使用:
# 分析当前目录
ncdu
# 分析特定目录
ncdu /Users
# 导出结果
ncdu -o export.json /path
duf - 磁盘使用可视化
安装:
brew install duf
使用:
duf
10. 开发辅助工具
watchexec - 文件监控执行
安装:
brew install watchexec
使用:
# 监控文件变化并执行命令
watchexec -e js,jsx npm test
# 监控并重启服务
watchexec -r python app.py
# 清屏重新执行
watchexec -c make build
entr - 文件变化触发
安装:
brew install entr
使用:
# 监控文件变化
find . -name "*.py" | entr pytest
# 监控并重启
ls *.go | entr -r go run main.go
# 交互式重载
echo main.c | entr -c make test
11. 工具选择指南
音视频处理场景
| 需求 | 推荐工具 | 理由 |
|---|---|---|
| 视频压缩/转换 | FFmpeg | 功能最全,性能最好 |
| 图片批量处理 | ImageMagick | 专业强大 |
| 视频下载 | yt-dlp | 支持最多平台 |
| 音频编辑 | sox | 命令行音频瑞士军刀 |
网络分析场景
| 需求 | 推荐工具 | 理由 |
|---|---|---|
| 端口扫描 | nmap | 行业标准 |
| 网络诊断 | mtr | 替代traceroute+ping |
| 流量分析 | tcpdump | 底层抓包 |
| 带宽监控 | bandwhich | 直观易用 |
数据处理场景
| 需求 | 推荐工具 | 理由 |
|---|---|---|
| JSON处理 | jq | 最强大的JSON工具 |
| YAML处理 | yq | 与jq语法一致 |
| CSV处理 | miller | 功能全面 |
| 格式转换 | pandoc | 支持格式最多 |
容器与云场景
| 需求 | 推荐工具 | 理由 |
|---|---|---|
| Docker管理 | lazydocker | TUI界面友好 |
| 镜像分析 | dive | 可视化层级 |
| AWS操作 | aws-cli | 官方工具 |
| K8s管理 | k9s | TUI交互式 |
12. 实战脚本示例
批量视频压缩脚本
#!/usr/bin/env bash
# video-compress.sh - 批量压缩视频
set -euo pipefail
INPUT_DIR="${1:-.}"
OUTPUT_DIR="${2:-./compressed}"
CRF="${3:-23}" # 质量 (18-28, 越小质量越好)
JOBS="${4:-4}" # 并行数
mkdir -p "$OUTPUT_DIR"
compress_video() {
local input="$1"
local output="$OUTPUT_DIR/$(basename "$input")"
ffmpeg -i "$input" \
-c:v libx264 -crf "$CRF" \
-preset medium \
-c:a aac -b:a 128k \
-movflags +faststart \
"$output" 2\\>&1 | grep -E "size=|time=" || true
}
export -f compress_video
export OUTPUT_DIR CRF
find "$INPUT_DIR" -type f \( -name "*.mp4" -o -name "*.avi" -o -name "*.mov" \) | \
parallel -j "$JOBS" --progress compress_video {}
echo "压缩完成! 输出目录: $OUTPUT_DIR"
网络诊断一键脚本
#!/usr/bin/env bash
# network-check.sh - 网络诊断
set -euo pipefail
TARGET="${1:-google.com}"
echo "=== 网络诊断: $TARGET ==="
echo
echo "1. Ping 测试:"
ping -c 4 "$TARGET"
echo
echo "2. 路由追踪:"
mtr --report --report-cycles 5 "$TARGET"
echo
echo "3. DNS解析:"
dig +short "$TARGET"
echo
echo "4. HTTP响应:"
curl -sI "https://$TARGET" | head -n 5
echo
echo "5. 端口扫描:"
nmap -F "$TARGET"
JSON数据处理流水线
#!/usr/bin/env bash
# json-pipeline.sh - JSON数据处理
# API -\> 过滤 -\> 转换 -\> 统计 -\> 导出
curl -s https://api.github.com/repos/microsoft/vscode/contributors | \
jq '[.[] | select(.contributions \> 100)]' | \
jq 'map({login, contributions, url: .html_url})' | \
jq 'sort_by(.contributions) | reverse' | \
jq -r '(["User", "Contributions", "URL"] | @csv), (.[] | [.login, .contributions, .url] | @csv)' \
\> top_contributors.csv
echo "导出完成: top_contributors.csv"
13. 总结
必装小众工具 Top 10
- FFmpeg - 音视频处理必备
- jq - JSON处理神器
- nmap - 网络安全扫描
- dive - Docker镜像分析
- hyperfine - 性能基准测试
- yq - YAML处理
- mtr - 网络诊断
- watchexec - 文件监控
- ncdu - 磁盘分析
- 1password-cli - 密码管理
一键安装命令
# 音视频处理
brew install ffmpeg imagemagick yt-dlp
# 网络分析
brew install nmap mtr bandwhich
# 数据处理
brew install jq yq miller csvkit
# 容器工具
brew install dive ctop lazydocker
# 密码安全
brew install pass gnupg
# 系统工具
brew install ncdu duf hyperfine watchexec entr
# 文档处理
brew install pandoc
十一、完整配置方案推荐
🎯 方案 1: 传统全能派
终端: iTerm2
Shell: Zsh + Oh My Zsh
提示符: Powerlevel10k
字体: MesloLGS NF
配色: Dracula
终端复用: tmux
文件管理: ranger
系统监控: btop
脚本工具: getopts + 手写
批量处理: xargs
🎯 方案 2: 现代化极客
终端: Warp
Shell: Fish
提示符: Starship
字体: JetBrains Mono Nerd Font
配色: Tokyo Night
文件管理: broot
系统监控: glances
脚本工具: argc
批量处理: GNU Parallel
任务调度: launchd
AI助手: aichat
🎯 方案 3: 极致性能
终端: Alacritty
Shell: Zsh(最小配置)
提示符: Starship
终端复用: zellij
字体: Hack Nerd Font
文件管理: nnn
系统监控: btop
脚本工具: 纯Bash
批量处理: GNU Parallel
🎯 方案 4: 批量自动化专家(新增)
终端: iTerm2 / Warp
Shell: Zsh + Starship
脚本框架: argc(日常)+ Bashly(复杂项目)
批量处理: GNU Parallel
任务调度: launchd
脚本生成: aichat + GitHub Copilot CLI
环境管理: direnv
实用工具:
- fd (快速文件查找)
- ripgrep (内容搜索)
- jq (JSON处理)
- yq (YAML处理)
快速脚本模板:
- mkscript (通用脚本)
- mkbatch (批处理脚本)
- mkcron (定时任务)
十二、总结
核心推荐
必装工具:
- 终端 - Warp(现代化)/ iTerm2(全能)
- 提示符 - Starship
- 模糊搜索 - fzf
- 文件管理 - ranger / nnn
- 系统监控 - btop
- HTTP 客户端 - httpie
- 快速跳转 - z / autojump
- 脚本框架 - argc(推荐)/ Bashly
- 批量处理 - GNU Parallel
- AI助手 - aichat
最小化起步(5分钟配置):
brew install --cask iterm2
brew install starship fzf btop
brew install --cask font-meslo-lg-nerd-font
# ~/.zshrc
eval "$(starship init zsh)"
脚本自动化起步(10分钟配置):
# 安装核心工具
brew install argc parallel aichat fd
# 添加快捷函数到 ~/.zshrc
cat \>\> ~/.zshrc << 'EOF'
# 快速创建脚本
mkscript() {
local name="${1:-script.sh}"
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail
echo "Hello, World!"
SCRIPT
chmod +x "$name"
echo "已创建: $name"
}
# 快速创建批处理脚本
mkbatch() {
local name="${1:-batch.sh}"
cat \> "$name" << 'SCRIPT'
#!/bin/bash
set -euo pipefail
find "${1:-.}" -type f | parallel -j 4 echo "处理: {}"
SCRIPT
chmod +x "$name"
echo "已创建批处理脚本: $name"
}
EOF
source ~/.zshrc
进阶配置(1小时):
- iTerm2 完整配置
- Zsh + Oh My Zsh
- Powerlevel10k
- 所有推荐工具
- 脚本模板库
- launchd定时任务
脚本自动化快速参考
批量图片处理:
# 批量压缩 (parallel)
find . -name "*.jpg" | parallel -j 4 'convert {} -quality 80 compressed/{/}'
# 批量重命名 (fd + parallel)
fd -e txt | parallel mv {} {.}.md
# 批量添加水印
find . -name "*.png" | parallel \
'convert {} -gravity southeast -annotate +10+10 "© 2025" watermarked/{/}'
定时任务:
# 创建 ~/Library/LaunchAgents/com.user.backup.plist
# 每天凌晨2点自动备份
launchctl load ~/Library/LaunchAgents/com.user.backup.plist
AI辅助脚本生成:
# 快速生成脚本
aichat "创建一个批量压缩视频的bash脚本"
# 优化现有脚本
cat slow.sh | aichat "优化这个脚本的性能"
# 解释复杂命令
aichat "解释: find . -name '*.log' -mtime +7 -delete"
最后更新时间:2025-11-09 调研范围:60+ Mac 终端工具(含小众特定领域工具) 重点推荐:iTerm2、Warp、Starship、Fish、fzf、ranger、btop、argc、GNU Parallel、aichat、FFmpeg、jq、nmap、dive