- 开发工具
【免费下载链接】Mac-CLI
macOS command line tool for developers – The ultimate tool to manage your Mac. It provides a huge set of command line commands that automatize the usage of your Mac.
Mac CLI 是一个面向开发者的 macOS 命令行工具集,它将系统更新、蓝牙/Wi-Fi 控制、DNS 管理、SSH 文件传输、Git 仓库操作、性能监控等高频运维场景封装为mac一条命令下的几十个简洁子命令。阅读完本文,你将掌握 Mac CLI 的安装配置流程、全部命令的分类与用法、每个命令背后的真实系统调用,以及它的插件扩展架构,从而在日常开发中直接用一条命令替代繁琐的原生命令序列。
Mac CLI 是什么
Mac CLI(mac command line tools)由主脚本 mac(版本 2.0)和一组可插拔的分类插件构成。它设计的核心理念有两个:
- 教学友好:每执行一个功能,终端都会先显示这条功能背后的真实命令(通过
echocommand开关控制),让使用者在完成操作的同时记住底层命令,方便日后脱离工具直接用原生命令。 - 易于扩展:命令按类别拆分为独立的 shell 插件文件,新增功能只需向插件目录添加一个
case分支即可,无需改动主脚本。
从主入口脚本 mac 可以看出,所有命令都集中登记在一个COMMANDS数组里,主脚本依次source各插件文件,插件通过case "$fn"匹配用户输入的第一个参数并执行对应逻辑:
COMMANDS=( list help usage categories general search network dns ssh ... ) # 依次加载插件 source "$MAC/mac-cli/plugins/brew" source "$MAC/mac-cli/plugins/general" source "$MAC/mac-cli/plugins/git" source "$MAC/mac-cli/plugins/network" # ... 其余插件如果输入的命令不在COMMANDS数组中,脚本会提示Command not found并引导你选择一个分类来查看用法(见 mac)。可用分类由 mac-cli/misc/help 中的MacCategories数组定义:general、git、homebrew、lamp、network、dns、performance、search、ssh、terminal、web_utilities、webdev。
一键安装与配置向导
Mac CLI 的安装被设计为"单步完成":一条命令即可完成拉取仓库、运行配置向导、安装依赖三步。安装脚本位于 mac-cli/tools/install,官方推荐两种方式:
方式一:curl
sh -c "$(curl -fsSL https://raw.githubusercontent.com/guarinogabriel/mac-cli/master/mac-cli/tools/install)"方式二:wget
sh -c "$(wget https://raw.githubusercontent.com/guarinogabriel/mac-cli/master/mac-cli/tools/install -O -)"安装完成后需要重新打开终端客户端,之后即可直接使用,例如运行mac help查看全部命令。
配置向导做了什么
安装脚本并非静默复制文件,它包含一个交互式配置向导,会依次向你提出两个问题:
- 是否让每个
mac命令先显示其背后执行的系统命令?(Yes / No) 选 Yes 时,安装脚本会通过sed把主脚本中的echocommand="false"替换为echocommand="true"(见 install 脚本),此后每条命令执行前都会先回显底层命令,方便学习记忆。 - 是否安装 fish shell 的 tab 补全?(仅在系统使用 fish 且存在
~/.config/fish时询问) 选 Yes 时会把 fish_completion 复制到~/.config/fish/completions/mac.fish。
随后脚本执行关键部署操作(install 脚本):
- 将主脚本复制为
/usr/local/bin/mac; - 将整个
mac-cli/目录(插件、补全、帮助文档)复制到/usr/local/bin/mac-cli; - 为所有子文件添加执行权限。
安装脚本还会顺带检测并补齐运行依赖(详见下文"环境要求"),并在安装了 bash-completion 的环境中将 bash_completion 放入/usr/local/etc/bash_completion.d/mac,实现命令自动补全。
配置:编辑 /usr/local/bin/mac
Mac CLI 的配置在首次安装时通过上述向导完成。之后如需调整,直接编辑/usr/local/bin/mac这个主脚本文件即可。该文件顶部有一段 Configuration 区:
# Mac CLI directory MAC="$(dirname "$0")" # Configuration export echocommand="true"核心配置项就是echocommand:
| 取值 | 行为 |
|---|---|
true | 每条mac命令执行前,先用绿色字体回显其背后的真实系统命令,起到"教学记忆"作用 |
false | 静默执行,只输出功能本身的运行结果 |
主脚本同时定义了若干导出变量,构成命令参数传递机制(mac):
export fn=$1 # 第一个参数:命令名,如 "wifi:scan" export firstParameter=$2 # 第二个参数:命令的输入参数 export secondParameter=$3 # 第三个参数 export allParameters=${@:2} # 剩余全部参数插件正是读取这些变量来获取用户输入。例如general插件中的find:text会读取allParameters作为待搜索文本,tar:compress读取firstParameter作为待压缩文件/目录。
环境要求
运行全部命令需要以下依赖(安装时若缺失会自动安装,见 install 脚本):
| 依赖 | 用途 | 安装方式 |
|---|---|---|
| Homebrew | macOS 包管理器,绝大多数命令和依赖的基础 | 未安装时通过官方安装脚本自动安装 |
| Git | Git 工具类命令、clone 仓库 | brew install git |
| Pipe Viewer(pv) | 为tar:compress提供带进度条的压缩管道 | brew install pv |
| wget | 下载类命令(如ip:public获取公网 IP) | brew install wget |
另外,安装脚本还会检查 bash-completion,确保mac命令在 bash 中支持 tab 补全。
更新与卸载
更新到最新版本(等价于先删除旧版本再重新执行安装):
sh -c "$(curl -fsSL https://raw.githubusercontent.com/guarinogabriel/mac-cli/master/mac-cli/tools/update)"update 脚本 的实现是:删除/usr/local/bin/mac与/usr/local/bin/mac-cli,在~/Downloads/mac-cli-update/临时目录重新执行安装脚本。
卸载:
sh -c "$(curl -fsSL https://raw.githubusercontent.com/guarinogabriel/mac-cli/master/mac-cli/tools/uninstall)"uninstall 脚本 只做两件事:删除/usr/local/bin/mac和/usr/local/bin/mac-cli目录,干净彻底。
命令全景
以下命令均来自 mac-cli/misc/help 与各插件源码,参数占位符X、N与原始文档一致。建议对照各插件文件查看底层实现。
Help / Commands List
| 命令 | 描述 | 参数 |
|---|---|---|
mac help | 列出 mac 脚本中的全部可用命令 |
通用命令(General Commands)
实现位于 mac-cli/plugins/general,底层调用以 macOS 原生命令和osascript为主:
| 命令 | 描述 | 参数 |
|---|---|---|
mac update | 安装 macOS 软件更新,并更新 Ruby gems、Homebrew、npm 及其已安装包 | |
mac lock | 锁定屏幕 | |
mac restart | 重启 macOS | |
mac sleep | 进入睡眠模式 | |
mac shutdown | 关机 | |
mac time | 在 Terminal/iTerm 右上角显示时钟 | |
mac screensaver | 启动屏幕保护 | |
mac folders:list | 列出当前目录下的文件夹及其大小 | |
mac folder:size | 计算当前文件夹大小 | |
mac bluetooth:status | 获取蓝牙状态 | |
mac bluetooth:enable | 启用蓝牙 | |
mac bluetooth:disable | 禁用蓝牙 | |
mac wifi:status | 获取 Wi-Fi 状态 | |
mac wifi:scan | 扫描可用 Wi-Fi 网络 | |
mac wifi:enable | 启用 Wi-Fi | |
mac wifi:disable | 禁用 Wi-Fi | |
mac dock:add-space N | 向 Dock 添加空白间隔 | N = 间隔数量 |
mac eject-all | 弹出所有已挂载的卷和磁盘 | |
mac battery | 获取电池状态 | |
mac info | 获取 macOS 版本信息 | |
mac hidden:show | 显示隐藏文件 | |
mac hidden:hide | 隐藏隐藏文件 | |
mac find:text X | 在目录内递归查找精确短语 | X = 文本字符串 |
mac find:biggest-files | 查找目录内最大的文件 | |
mac find:biggest-directories | 查找目录内最大的文件夹 | |
mac zip:extract X | 解压 Zip 文件到当前目录 | X = 待解压的 Zip 文件 |
mac gzip:compress X | 用 Gzip 压缩当前文件 | X = 待压缩文件 |
mac gzip:extract X | 解压 Gzip 文件到当前目录 | X = 待解压的 Gzip 文件 |
mac tar:compress X | 用 tar 压缩文件/目录并显示进度 | X = 文件或目录 |
mac tar:extract X | 解压 tar 文件到当前目录 | X = 待解压的 tar 文件 |
源码补充:mac update是一个多步骤升级任务,底层依次执行sudo softwareupdate -i -a、brew update && brew upgrade && brew upgrade --cask && brew cleanup、npm install npm -g && npm update -g、yarn global upgrade、sudo gem update --system && sudo gem update、pip 与 pip3 的过期包升级,并在检测到 Atom 时执行apm upgrade --no-confirm(见 general 插件)。
mac wifi:*系列通过 Apple 80211 私有框架的airport工具读取状态与扫描网络,通过networksetup -setairportpower开关 Wi-Fi,默认网卡设备为en0(可用环境变量_W_DEVICE覆盖,见 general 插件)。
mac find:text X执行时会先询问要搜索的文件扩展名,再组合成find . -iname "*.$extension" | xargs grep -in --color "$allParameters"这条真实命令(general 插件)。
mac tar:compress充分利用了 pv 依赖,管道为tar -czf - $firstParameter | (pv -p --timer --rate --bytes > "$filename".tgz),压缩大目录时可实时看到进度、耗时与速率(general 插件)。
搜索工具(Search Utilities)
实现位于 mac-cli/plugins/search:
| 命令 | 描述 | 参数 |
|---|---|---|
mac find:recent N | 查找最近 N 分钟内修改过的文件 | N = 分钟数 |
mac search:replace X | 在文件中查找并替换字符串 | X = 执行查找替换的文件 |
find:recent底层是sudo find / -mmin N -type f,从根目录全盘扫描(search 插件);search:replace则基于LC_CTYPE=C sed -i'' -e 's#旧串#新串#g' 文件实现,执行时会交互式收集旧字符串、新字符串(该命令也登记在 general 插件的search:replace分支中,见 general 插件)。
网络工具(Network Utilities)
实现位于 mac-cli/plugins/network:
| 命令 | 描述 |
|---|---|
mac speedtest | 互联网连接速度测试 |
mac ports | 列出正在使用的端口 |
mac ip:local | 获取本地 IP 地址 |
mac ip:public | 获取公网 IP 地址 |
源码细节:speedtest调用 macOS 自带的networkQuality -v;ports执行sudo lsof -iTCP -sTCP:LISTEN -P;ip:local优先尝试ipconfig getifaddr en0,失败则回退到en1;ip:public使用wget http://ipinfo.io/ip -qO -查询公网 IP(这也是安装脚本会补装 wget 的原因)。
DNS 工具(DNS Utilities)
实现位于 mac-cli/plugins/dns:
| 命令 | 描述 |
|---|---|
mac dns:list | 列出 DNS 服务器 |
mac dns:add | 添加 DNS 服务器 |
mac dns:remove | 移除 DNS 服务器 |
mac dns:flush | 刷新 DNS 缓存 |
值得注意的实现细节:
dns:list读取/etc/resolv.conf并提取nameserver行;dns:add/dns:remove会用正则^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$校验 IP 地址格式,不合法则直接报错退出(exit 1),合法后才以sudo写入/etc/resolv.conf;dns:flush会根据系统版本走不同分支:macOS 10.10.x 使用discoveryutil mdnsflushcache,10.6.x 使用dscacheutil -flushcache,其余较新版本统一sudo killall -HUP mDNSResponder(dns 插件)。
SSH 工具(SSH Utilities)
实现位于 mac-cli/plugins/ssh,这类命令均为交互式:输入命令后依次提示输入服务器地址、用户名,必要时还有本地/远程路径:
| 命令 | 描述 | 参数 |
|---|---|---|
mac ssh:download-file X | 通过 SSH 从远程服务器下载文件 | X = 远程文件路径 |
mac ssh:download-folder X | 通过 SSH 从远程服务器下载整个目录 | X = 远程目录路径 |
mac ssh:sync:local X | 用 rsync 通过 SSH 将远程目录同步到本地 | X = 要同步到本地的远程目录路径 |
mac ssh:sync:remote X | 用 rsync 通过 SSH 将本地目录同步到远程 | X = 要从本地同步到的远程目录路径 |
mac ssh:upload X | 通过 SSH 上传文件到远程服务器 | X = 待上传文件路径 |
mac ssh:public-key | 复制 SSH 公钥 | |
mac ssh:list | 列出已保存的 SSH 凭据 |
底层实现:下载/上传基于scp(下载目录时加-r);两个sync命令基于rsync -a --progress(sync:local为拉取、sync:remote为推送,见 ssh 插件);ssh:public-key执行pbcopy < ~/.ssh/id_rsa.pub,一键把公钥复制到剪贴板。README 中登记的mac ssh:list与ssh:public-key均可在帮助脚本中找到对应说明(misc/help)。
性能与维护工具(Performance and maintenance Utilities)
实现位于 mac-cli/plugins/performance:
| 命令 | 描述 |
|---|---|
mac system | 显示系统信息以评估 Mac 性能 |
mac temp | 显示温度、风扇和电池统计信息 |
mac memory | 按内存占用排序查看内存使用情况 |
mac trash:empty | 清空废纸篓 |
mac trash:size | 计算废纸篓大小 |
源码细节:memory执行top -o MEM;trash:empty执行sudo rm -rf ~/.Trash/*;trash:size执行du -sh ~/.Trash/(performance 插件)。system与temp在帮助脚本的 performance 分类中列出(misc/help)。
Git 工具(Git Utilities)
实现位于 mac-cli/plugins/git:
| 命令 | 描述 |
|---|---|
mac git:config | 显示本地 Git 配置 |
mac git:open | 在 GitHub 上打开当前仓库 |
mac git:create:branch | 基于当前分支创建新分支 |
mac git:branches:date | 获取当前项目所有分支的最后更新时间 |
mac git:undo-commit | 撤销最近一次提交 |
mac git:log | 查看当前分支最近的提交 ID 和标题 |
mac git:branch | 查看所有分支 |
mac git:branch:rename | 重命名 Git 分支 |
mac git:branch:remove-local | 删除本地 Git 分支 |
mac git:branch:remove-remote | 删除本地和远程 Git 分支 |
mac git:settings | 检查 Git 设置 |
mac git:add-removed | 将已删除文件加入暂存区 |
mac git:size | 获取当前 Git 目录的大小 |
源码细节:git:create:branch执行git checkout -b 名称;git:undo-commit执行git reset --soft HEAD~,保留工作区改动;git:remove-remote会先git branch -d再git push origin --delete;git:branches用git for-each-ref按提交时间排序展示各分支;git:size先git bundle create tmp.bundle --all打包再统计体积并自动清理(git 插件、git 插件)。git:open会从remote.origin.url解析出仓库地址并在浏览器打开当前分支(git 插件)。
Homebrew 工具(Homebrew Utilities)
实现位于 mac-cli/plugins/brew:
| 命令 | 描述 |
|---|---|
mac brew | 获取已安装的 Homebrew 包列表 |
mac brew:update | 升级 Homebrew、已安装包并清理 |
其中brew:update的执行链为brew update; brew upgrade; brew upgrade --cask; brew cleanup,一次完成 formula 与 cask 的升级和清理(brew 插件)。
音量工具(Volume Utilities)
实现位于 mac-cli/plugins/volume,通过osascript控制音量:
| 命令 | 描述 |
|---|---|
mac volume | 获取当前音量(带参数 X 时设置为 X%) |
mac volume:ismute | 检查是否静音 |
mac volume:mute | 静音 |
mac volume:unmute | 取消静音 |
架构解析:主脚本 + 插件 + 补全
从源码结构看,Mac CLI 的分层非常清晰:
- mac:唯一入口。负责定义
COMMANDS白名单、导出参数变量、加载帮助脚本和全部插件,并拦截未知命令。所有"转发"逻辑都在这里完成。 - mac-cli/plugins/:9 个按领域拆分的插件文件(brew、general、git、network、dns、performance、search、ssh、volume)。新增命令时,只需在对应插件的
case "$fn"中加入新分支,并把命令名追加到COMMANDS数组即可完成扩展。 - mac-cli/misc/help:帮助与分类系统,
mac help输出的全部文案由它生成;支持按分类查看用法(mac categories、mac general等)。 - mac-cli/completion/:bash 与 fish 的 tab 补全脚本。bash 版本通过
awk "/COMMANDS=/,/#/"从/usr/local/bin/mac中动态提取命令列表生成补全候选(bash_completion),fish 版本同理(fish_completion),因此新增命令后补全列表会自动跟随主脚本更新。
快速上手建议
- 按上文任一方式安装,向导中第一问选择 Yes,开启"命令教学回显"模式;
- 重新打开终端,先运行
mac help熟悉全部分类,再运行mac categories查看分类清单; - 用
mac info确认系统版本、mac battery查看电量、mac wifi:scan扫描网络、mac find:biggest-files排查磁盘占用; - 借助
mac git:create:branch、mac git:undo-commit、mac git:size提升 Git 日常操作效率; - 涉及 SSH 的同步上传下载命令全部为交互式,准备好服务器地址、用户名与路径即可使用;
- 定期运行
mac update一次性完成系统与开发环境的整体升级,或mac brew:update只更新 Homebrew 体系。
需要留意的是,部分命令(如dns:add、ports、find:recent、trash:empty)需要sudo权限,会在执行时提示输入管理员密码;update命令涉及的 pip/gem/yarn 升级链路较长,适合在空闲时段运行。Mac CLI 的价值在于把上述分散在各工具链中的命令统一收敛到mac之下,并在执行过程中持续帮助你记住它们。
- 开发工具
【免费下载链接】Mac-CLI
macOS command line tool for developers – The ultimate tool to manage your Mac. It provides a huge set of command line commands that automatize the usage of your Mac.
相关推荐
Mac CLI:开发者必备的macOS命令行终极管理工具
Mac CLI:开发者必备的macOS命令行终极管理工具 你还在为记住复杂的macOS系统命令而烦恼吗?还在为频繁切换图形界面和终端而效率低下吗?Mac CLI
开发工具终极Mac命令行工具:一键管理你的macOS系统
终极Mac命令行工具:一键管理你的macOS系统 Mac CLI是一款专为开发者打造的macOS命令行工具,它提供了大量自动化系统管理命令,让你无需复杂操作即可
开发工具Tuinity性能优化指南:如何让Minecraft服务器支持100+玩家在线
Tuinity性能优化指南:如何让Minecraft服务器支持100+玩家在线 Tuinity是基于Paper的Minecraft服务器软件分支,专注于在不改变
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考