先贴地址和安装...目前暂时只支持了 Homebrew 。手动安装可以自行编译或走 GitHub Release 。 开源地址: https://github.com/normal-coder/vmctl Homebrew 安装: brew install --cask normal-coder/tap/vmctl 为什么写这个 核心还是解决自己的使用问题(笑。 出于对环境纯粹的洁癖,一般各种新工具的尝试还是选择在干净的 OS 内去解决。 考虑到各种安全、隔离问题,有些环境不想/不适用用容器。于是常年在重装各种系统和各种初始化中来来去去,每次操作都相当耗费心神。 初始化系统的活儿交给 Agent 干,心里又不踏实😩。。 于是反复在各种老牌虚拟化方案和新晋虚拟机中来回捯饬。最终。。 对个人免费的 VMware 还是真香 😂😂😂 VMware 漫长的历史和博通的产品调性。让 VMware 比起 PD/OrbStack/Lima 一众产品,开发者友好程度不太够。 vmrun 的参数太反人类了——快照、克隆、往 guest 里拷个文件,每样都要记一长串路径参数,用完就忘;敲起來还费手 用惯了 Parallels 的 prlctl ,换到 VMware 之后发现没有对应手感的 CLI 想脚本化批量操作,GUI 点不动;管 vSphere 又不想开浏览器 ... 为了手感 。照着 prlctl 的命令风格写了一个,底层用统一的 Driver 接口把两种后端收进同一套命令里。 快速感受 $ vmctl list ┌────────────┬───────┬─────┬─────────┬─────────────┬──────────────────────────────────────┐ │ 名称 │ 状态 │ CPU │ 内存 │ 客户机系统 │ UUID │ ├────────────┼───────┼─────┼─────────┼─────────────┼──────────────────────────────────────┤ │ ubuntu-dev │ on │ 4 │ 8192 MB │ Ubuntu 24.04│ 564d1156-abcd-ef01-2345-678901234567 │ │ win11 │ off │ 8 │ 16384 MB│ Windows 11 │ 564d9876-2345-6789-abcd-ef0123456789 │ └────────────┴───────┴─────┴─────────┴─────────────┴──────────────────────────────────────┘ 📊 基础信息 功能 / 命令语法 备注 列出所有虚拟机 vmctl list 支持 --json 输出格式。 查看虚拟机详情 vmctl info 显示名称、UUID 、Tools 状态、Guest IP 等。 查看版本信息 vmctl version 支持 --json 输出格式。 🔌 电源管理 功能 / 命令语法 备注 启动虚拟机 vmctl start [--nogui] 返回即代表已加电,不等待 Guest OS 就绪。 关闭虚拟机 vmctl stop [--hard] --hard 表示强制断电。 挂起虚拟机 vmctl suspend 暂停并保存当前状态到磁盘。 恢复虚拟机 vmctl resume 恢复被挂起的虚拟机。 暂停虚拟机 vmctl pause 暂停虚拟机运行(保持在内存中)。 重启虚拟机 vmctl reset [--hard] --hard 表示强制重启。 🔄 生命周期 功能 / 命令语法 备注 克隆虚拟机 vmctl clone --name [--full] [--snapshot ] [--path ] 默认链接克隆;--full 为完整拷贝。vmrun 后端要求源 VM 已关机,vSphere 支持开机克隆。 派生新虚拟机 vmctl create --from [--memory 4096] [--cpus 4] [--full] 从现有 VM 派生( vmrun 后端不支持从零创建裸 VM )。 修改虚拟机配置 vmctl set --memory 4096 --cpus 4 [--name ] 必须在虚拟机已关机状态下执行。 删除虚拟机 vmctl delete 删除虚拟机及其全部文件,不可恢复。 📸 快照管理 功能 / 命令语法 备注 列出快照 vmctl snapshot list [--tree] --tree 可按树状结构展示快照关系。 创建快照 vmctl snapshot create 为当前状态创建快照。 删除快照 vmctl snapshot delete [--children] --children 表示连同子快照一并删除。 恢复快照 vmctl snapshot revert 必须在虚拟机已关机状态下执行。会一并恢复快照时的电源状态。 🖥️ Guest OS 交互 功能 / 命令语法 备注 执行 Guest 命令 vmctl exec [-u root] -- ' ' 经 /bin/sh 执行,捕获输出并透传退出码。要求 VM 已开机且安装 VMware Tools 。 查看 Guest IP vmctl ip [--wait] 脚本友好,直接输出裸 IP 。要求安装 VMware Tools 。 SSH 进入 Guest vmctl shell [--user u] [--port 22] [-i key] [--wait] [--dry-run] 要求 Guest 开启 sshd 。-- 之后的参数会透传给 ssh 命令(如 vmctl shell -- -v )。 特性 双后端一套命令 :默认 vmrun (本机 Fusion / Workstation ), --backend vsphere 直连 vCenter / ESXi ( govmomi ),本地和实验室环境切换只是换一个参数; VM 引用很随意 :显示名、名称的唯一子串、UUID 前缀、 .vmx 路径、vSphere 的 MoRef ( vm-42 )都能用,不必先查 UUID ; 同名快照消歧 :vmrun 按名字操作快照,撞名时给出 名字#uid 候选引用(走 Fusion 13.5+ 的 vmcli ): guest 内执行 : vmctl exec -- 'df -h' 捕获输出并透传退出码, vmctl shell 直接 SSH 进去( -- 之后透传给 ssh ); 为脚本设计 : --json 全命令覆盖;退出码分级( 0 成功 / 1 运行错误 / 2 用法错误 / 3 对象不存在 / 4 后端不支持,exec 再透传 guest 程序退出码); 中文界面 :帮助和报错默认中文, --lang en 切英文; shell 补全内置,VM 名是动态读当前后端列表补的; 多 profile 配置 : ~/.config/vmctl/config.yaml 里配好本地 + 远程两套


  • 情报分类:工作与职业机会
  • 分类依据:内容涉及招聘、求职或职业发展
  • 信息来源:服务器 / V2EX
  • 发布时间:2026/10/6 01:58:01