☰
Mac CLI 完全指南:用一套命令行工具自动化管理你的 macOS 开发环境
2026/10/14 20:55:09 网站建设 项目流程
  • 开发工具

【免费下载链接】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.

项目地址:https://gitcode.com/gh_mirrors/ma/Mac-CLI
点击查看免费下载

Mac CLI 是一个面向开发者的 macOS 命令行工具集,它将系统更新、蓝牙/Wi-Fi 控制、DNS 管理、SSH 文件传输、Git 仓库操作、性能监控等高频运维场景封装为mac一条命令下的几十个简洁子命令。阅读完本文,你将掌握 Mac CLI 的安装配置流程、全部命令的分类与用法、每个命令背后的真实系统调用,以及它的插件扩展架构,从而在日常开发中直接用一条命令替代繁琐的原生命令序列。

Mac CLI 是什么

Mac CLI(mac command line tools)由主脚本 mac(版本 2.0)和一组可插拔的分类插件构成。它设计的核心理念有两个:

  1. 教学友好:每执行一个功能,终端都会先显示这条功能背后的真实命令(通过echocommand开关控制),让使用者在完成操作的同时记住底层命令,方便日后脱离工具直接用原生命令。
  2. 易于扩展:命令按类别拆分为独立的 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查看全部命令。

配置向导做了什么

安装脚本并非静默复制文件,它包含一个交互式配置向导,会依次向你提出两个问题:

  1. 是否让每个mac命令先显示其背后执行的系统命令?(Yes / No) 选 Yes 时,安装脚本会通过sed把主脚本中的echocommand="false"替换为echocommand="true"(见 install 脚本),此后每条命令执行前都会先回显底层命令,方便学习记忆。
  2. 是否安装 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 脚本):

依赖用途安装方式
HomebrewmacOS 包管理器,绝大多数命令和依赖的基础未安装时通过官方安装脚本自动安装
GitGit 工具类命令、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),因此新增命令后补全列表会自动跟随主脚本更新。

快速上手建议

  1. 按上文任一方式安装,向导中第一问选择 Yes,开启"命令教学回显"模式;
  2. 重新打开终端,先运行mac help熟悉全部分类,再运行mac categories查看分类清单;
  3. 用mac info确认系统版本、mac battery查看电量、mac wifi:scan扫描网络、mac find:biggest-files排查磁盘占用;
  4. 借助mac git:create:branch、mac git:undo-commit、mac git:size提升 Git 日常操作效率;
  5. 涉及 SSH 的同步上传下载命令全部为交互式,准备好服务器地址、用户名与路径即可使用;
  6. 定期运行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.

项目地址:https://gitcode.com/gh_mirrors/ma/Mac-CLI
点击查看免费下载
上一篇:网盘下载慢到怀疑人生?用这款免费开源下载助手一键拿直链,彻底告别龟速
下一篇:从零到精通游戏串流:Sunshine 自托管服务器保姆级实战指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询