文章目录
安装Multipass并创建Ubuntu虚拟机
确保Multipass已安装在Mac上,可通过官网或Homebrew安装。
powershell
brew install multipass
- 在 macOS 中,通过 brew install multipass 安装的 Multipass 会被下载并安装到
/opt/homebrew/bin 目录下(如果你的 Mac 是 Apple Silicon 芯片,即 M1/M2 系列);如果是
Intel 芯片的 Mac,则会安装到 /usr/local/bin 目录下。
使用以下命令创建Ubuntu虚拟机:
bash
multipass launch 22.04 --name myubuntu
- launch 22.04:指定下载 Ubuntu 22.04 LTS 版本(默认是 ARM64 架构,适配 M1/M2 芯片);
--name myubuntu:给虚拟机命名为 "myubuntu"(可自定义,比如 "ubuntu22"),方便后续管理。
启动虚拟机并进入Shell:
bash
multipass shell myubuntu
- 成功进入后,终端提示符会变成 ubuntu@myubuntu:~$,说明已经在 Ubuntu 系统内了,此时可以执行 Ubuntu
命令(比如 sudo apt update 更新软件源、ls 查看文件等)。
在Ubuntu虚拟机中安装Graphviz
在虚拟机内运行以下命令更新软件包列表并安装Graphviz:
bash
sudo apt update
sudo apt install graphviz
验证安装是否成功:
bash
dot -V
配置共享文件夹(可选)或将待执行文件传到虚拟机
若需在Mac和虚拟机间共享文件,使用Multipass挂载目录。例如将Mac的~/graphviz_projects共享到虚拟机:
bash
multipass mount ~/graphviz_projects myubuntu:/home/ubuntu/graphviz
在虚拟机内可通过/home/ubuntu/graphviz访问共享文件。
powershell
multipass transfer /Users/电脑名/Documents/0qt/251120Grapgviz/1/demo3.dot myubuntu:~/
- 传输命令执行后,在 Mac 终端执行 multipass shell 虚拟机名(比如
multipass shell myubuntu),进入 Ubuntu 虚拟机; - 执行 ls 命令(默认就在 /home/ubuntu 目录),如果输出中能看到
demo3.dot,说明已经成功放在目标目录了。
使用Graphviz生成图表
在虚拟机内创建或编辑.dot文件,例如:
dot
digraph G {
A -> B;
B -> C;
C -> A;
}
使用以下命令生成图表(如PNG格式):
bash
dot -Tpng demo3.dot -o demo3.png
- 命令说明:把 demo3.dot 转换成 demo3.png 图片,生成的 demo3.png
会保存在同一个目录(/home/ubuntu)。
传输文件到Mac(若未共享文件夹)
将生成的图表从虚拟机复制到Mac:
bash
# 在 Mac 终端执行(退出 Ubuntu 或新建终端窗口)
multipass transfer 虚拟机名:~/demo3.png ~/Desktop
之后直接在 Mac 桌面双击 demo3.png 就能查看生成的图形了。
- 总结:核心是「先把 Mac 上的文件传到 Ubuntu,再在 Ubuntu 中执行」,因为两个系统的文件路径是独立的,Ubuntu
无法直接访问 Mac 的本地文件~
常见问题处理
若遇到权限问题,确保挂载目录的权限正确:
bash
sudo chown -R ubuntu:ubuntu /home/ubuntu/graphviz
若Graphviz命令未找到,检查安装路径或重新安装。
查看demo3.dot从开始执行到执行结束共用了多长时间
- 用 time 命令直接计时(最推荐)
在 Ubuntu 终端中,执行 dot 命令时,前面加上 time 关键字,会自动统计命令运行的总时间:
powershell
time dot -Tpng demo3.dot -o demo3.png
执行后输出示例:
powershell
real 0m0.023s # 实际总耗时(从开始到结束的墙钟时间,包含等待时间)
user 0m0.018s # 命令在用户态运行的时间
sys 0m0.005s # 命令在内核态运行的时间
- 核心关注 real 字段,就是生成图片的总耗时(示例中是 0.023 秒,即 23 毫秒)。这种方法无需额外操作,执行命令后直接显示结果,适合快速统计。
- 用 date 命令记录开始 / 结束时间(手动计算)
如果需要更灵活的时间记录(比如保存到文件),可以用 date 命令分别记录 "开始时间" 和 "结束时间",再计算差值:
先记录开始时间(执行命令前):
powershell
start_time=$(date +%s%N) # 记录当前时间(纳秒级,精准)
执行 dot 生成命令:
powershell
dot -Tpng demo3.dot -o demo3.png
记录结束时间并计算耗时:
powershell
end_time=$(date +%s%N)
elapsed=$(( (end_time - start_time) / 1000000 )) # 转换为毫秒(1秒=1000毫秒=1e9纳秒)
echo "生成总耗时:$elapsed 毫秒"
执行后输出示例:
powershell
生成总耗时:25 毫秒
- 这种方法适合需要后续分析(比如多次生成对比耗时)的场景,结果更直观(直接显示毫秒数)。
- 注意事项:生成耗时通常很短(尤其是小体积的 dot 文件),如果耗时超过几秒,可能是 dot 文件语法错误或文件过大,可先检查 demo3.dot 的语法(执行 dot -v demo3.dot 查看是否有报错)。
两种方法的结果基本一致,time 命令更简洁,date 命令更灵活,根据需求选择即可。
生成的图表可能有乱码问题
在Multipass虚拟机的Ubuntu中,Graphviz生成的图出现汉字乱码,主要是系统中缺少中文字体支持和Graphviz未配置中文兼容字体导致的。
一、核心原因
1.系统无中文字体:Ubuntu默认不预装中文字体,Graphviz渲染中文时因找不到对应字体,会以乱码(如方框、特殊符号)显示
2.Graphviz字体配置缺失:Graphviz默认使用的字体(如Helvetica)不支持中文,需手动指定支持中文的字体(如宋体、文泉驿等)
3.编码与Locale配置问题:系统编码或区域设置未适配中文,导致字符解析异常
二、解决步骤
1.安装中文字体
在Multipass的Ubuntu终端中执行以下命令,安装中文字体(dot文件中指定了字体,node [shape=box, fontname="WenQuanYi Micro Hei"]; // 中文支持)
powershell
sudo apt update
sudo apt install fonts-wqy-zenhei fonts-wqy-microhei # 安装文泉驿系列中文字体
2.配置 Graphviz 字体
在生成图形的 DOT 文件中,显式指定支持中文的字体。例如,在 DOT 脚本中添加字体配置:
c
digraph causal_loop {
rankdir=TB; // 从上到下布局,贴合因果流向
node [shape=box, fontname="WenQuanYi Micro Hei"]; // 中文支持
edge [fontname="SimHei"];
}
重新执行dot文件即可解决乱码问题