1. 为什么你需要一个NOI Linux 2.0虚拟机如果你是一名信息学竞赛的选手或者是一位正在指导学生备赛的教练那么“NOI Linux 2.0”这个名字你一定不陌生。从2021年9月开始它就成了全国青少年信息学奥林匹克竞赛NOI以及CSP-J/S认证活动的官方指定操作系统环境。这意味着无论你平时习惯用Windows还是macOS到了真正的赛场上你都必须在这个基于Ubuntu的Linux系统里写代码、编译和调试。我见过太多平时在自己电脑上跑得飞快的程序一到比赛环境就各种“水土不服”不是编译器版本不对就是库文件缺失甚至因为文件路径的差异导致程序直接崩溃。这种临场翻车的滋味可不好受。所以最稳妥的备赛方式就是在自己的电脑上提前搭建一个和赛场一模一样的“训练场”。这个训练场就是NOI Linux 2.0的虚拟机。通过虚拟机软件比如我们后面要用的VirtualBox你可以在你的Windows系统里模拟出一台完整的、独立的“电脑”这台“电脑”里运行的就是纯净的NOI Linux 2.0。它的好处太多了首先环境绝对标准官方镜像里预装了所有比赛需要的工具像g、gdb、Python3、Code::Blocks等等版本都是锁死的和赛场完全一致。其次它非常安全你在虚拟机里随便折腾哪怕把系统搞崩了也丝毫不会影响你电脑本身的Windows系统删掉重装一个就是了。最后它方便携带整个虚拟机可以打包成一个文件拷贝到U盘里在学校的电脑、家里的电脑上都能无缝使用保证你的训练环境始终如一。听起来可能有点技术门槛但别担心我接下来要分享的这套流程是我带学生备赛这几年反复验证过的“保姆级”教程。我会把每一步的操作、每一个选项背后的含义以及我踩过的那些坑都清清楚楚地告诉你。只要你跟着做哪怕你是第一次接触Linux也能在半小时内拥有一个稳定、标准的竞赛环境。我们需要的工具很简单一个叫VirtualBox的免费虚拟机软件和一个从NOI官网下载的系统镜像文件。准备好了吗我们开始吧。2. 准备工作下载正确的“原料”工欲善其事必先利其器。在开始安装之前我们得先把两样核心“原料”准备好虚拟机软件和系统镜像。这一步千万不能图省事随便下载用错了版本后面可能会遇到各种奇怪的问题。首先检查一下你的电脑硬件是否达标。这是最基本的前提你的电脑必须是64位操作系统。怎么查看呢在Windows 10或11的桌面上找到“此电脑”图标右键点击它选择“属性”。在弹出的系统信息窗口里找到“系统类型”这一行确认后面写的是“64位操作系统”。如果不是那很遗憾你的电脑可能无法顺利运行虚拟机。另外我建议你的电脑至少有8GB的内存并且为这个虚拟机预留出30GB以上的空闲硬盘空间。因为虚拟机本身会占用大约20GB的空间还需要一些余量来安装你后续的练习代码和测试数据。接下来我们下载虚拟机软件。我强烈推荐使用Oracle VM VirtualBox。它完全免费、开源而且对个人用户非常友好性能也足够稳定。我们不下载最新版为了最大程度的兼容性我们选择和NOI Linux 2.0发布时期更匹配的6.0.x版本。你可以直接访问VirtualBox的官方下载页面找到历史版本下载VirtualBox-6.0.24-139119-Win.exe这个安装包。如果你觉得找起来麻烦也可以记住这个直接的下载链接https://download.virtualbox.org/virtualbox/6.0.24/VirtualBox-6.0.24-139119-Win.exe。把它保存到你电脑上一个容易找到的文件夹里比如“下载”目录。然后是最关键的一步下载NOI Linux 2.0的系统镜像文件。这个文件的后缀是.iso你可以把它理解成一张系统的“安装光盘”。务必从官方渠道下载以确保文件的完整性和安全性。NOI竞赛的官方技术支持网站noiresources.ccf.org.cn提供了下载。镜像文件的直接下载链接是https://noiresources.ccf.org.cn/ubuntu-noi-v2.0.iso。这个文件比较大大约有2.5GB下载需要一些时间。下载完成后最好用校验工具比如HashCalc核对一下文件的SHA256校验码确保下载过程中没有出错。官方的校验码通常会在下载页面提供核对一致后我们就可以放心使用了。3. 安装VirtualBox与创建虚拟机“空壳”原料备齐我们现在开始搭建“房子”的框架——安装虚拟机软件并创建一个等待安装系统的虚拟机“空壳”。首先双击我们下载好的VirtualBox-6.0.24-139119-Win.exe文件启动安装程序。安装过程非常简单基本上就是一路点击“下一步”。需要注意的只有两个地方一是安装组件保持默认全选即可特别是“VirtualBox USB Support”一定要勾选这关系到你后期在虚拟机和主机之间使用U盘二是安装过程中Windows可能会弹出“是否允许此应用对设备进行更改”的安全提示点击“是”即可。安装完成后不需要立即运行我们直接进入下一步。打开桌面上新出现的“Oracle VM VirtualBox”图标你会看到一个简洁的管理界面。点击左上角蓝色的“新建”按钮我们要开始创建一台新的虚拟电脑了。名称和类型在“名称”里你可以随意填写比如“NOI Linux 2.0”或者“我的竞赛环境”这只是一个标识。“文件夹”是指这个虚拟机的配置文件和数据存放在你电脑的哪个位置。这里非常重要点击右边的文件夹图标选择一个剩余空间大于30GB的磁盘分区比如D盘并在里面新建一个专门的文件夹例如“VirtualBox VMs”。因为虚拟机的整个“硬盘”文件都会放在这里后期会变得很大。“类型”选择“Linux”“版本”选择“Ubuntu (64-bit)”。确认无误后点击“下一步”。内存大小这一步是给虚拟机分配运行内存RAM。官方建议是2048MB即2GB。我个人的经验是如果你的电脑物理内存有16GB可以大方地分配4096MB4GB给虚拟机这样运行起来会更加流畅尤其是在编译大型程序或同时开多个软件时。但如果你的电脑只有8GB内存那么分配2048MB是更稳妥的选择要留足够的内存给Windows主机本身运行否则两边都会很卡。设置好后点击“下一步”。虚拟硬盘现在我们要为虚拟机创建“硬盘”。选择“现在创建虚拟硬盘”点击“创建”。硬盘文件类型选择默认的“VDI (VirtualBox磁盘映像)”。接着是“存储在物理硬盘上”的方式这里选择“动态分配”。我解释一下这两个选项“固定大小”会立刻在你电脑上划出你指定大小的空间比如20GB哪怕虚拟机只用了几GB这20GB也被占用了“动态分配”则比较灵活虚拟机文件最初很小随着你往里面装系统、存文件它才会慢慢增大最大不超过你设定的上限。显然“动态分配”更节省我们宝贵的硬盘空间。文件位置和大小文件位置默认会放在你刚才设置的“文件夹”路径下文件名就是你的虚拟机名称后缀是.vdi我们不用改。关键是“虚拟硬盘大小”这里我建议设置为25GB。虽然官方说20GB够用但考虑到你后期可能会安装一些额外的工具、积累大量的测试数据和代码文件预留多一点空间会更从容。把滑块拖到25GB或者直接输入数字25点击“创建”。好了至此一个“空壳”虚拟机就创建好了。它就像一台刚组装好的电脑有了主板、内存和硬盘但硬盘是空的还没有安装操作系统。接下来我们就要把下载好的NOI Linux 2.0“安装光盘”塞进去开始安装系统。4. 关键安装步骤与避坑指南虚拟机创建完毕在VirtualBox主界面选中它点击绿色的“启动”按钮。第一次启动会弹出一个对话框让你选择“启动盘”。点击右边那个小小的文件夹图标找到你之前下载的ubuntu-noi-v2.0.iso文件选中它然后点击“启动”。虚拟机就会从这个ISO镜像文件开始引导。第一个重要提示来了在点击“启动”之前我强烈建议你断开电脑的物理网络连接关闭Wi-Fi或者拔掉网线。这是整个安装过程中最容易被忽略但至关重要的一步。为什么呢因为安装程序默认会尝试从网络下载语言包和系统更新而NOI官方的这个镜像已经集成了所有必要组件联网更新不仅会耗费大量时间还可能因为网络问题导致安装卡住甚至失败。断网安装是最干净、最快速的方式。虚拟机屏幕亮起你会看到Ubuntu的安装界面。选择语言在左侧列表中选择“中文简体”然后点击右侧的“安装Ubuntu”。键盘布局直接点击“继续”使用默认的“汉语”即可。更新与其他软件接下来是“安装类型”页面。这里请务必注意一定要取消勾选“安装Ubuntu时下载更新”。同时也取消勾选“为图形或无线硬件……安装第三方软件”。我们的目标是一个纯净、标准的竞赛环境不需要任何额外的更新或驱动。确保这两个选项都没有打勾后点击“继续”。安装类型下一个界面是“安装类型”询问你如何安装。因为我们是在全新的虚拟硬盘上安装所以选择默认的“清除整个磁盘并安装Ubuntu”完全不用担心这个操作只会清除虚拟机的虚拟硬盘对你电脑本身的Windows系统没有任何影响。放心点击“现在安装”在弹出的确认对话框中点击“继续”。时区设置在地图上点击中国上海的位置或者直接输入Shanghai时区会自动设置为“Asia/Shanghai”点击“继续”。创建用户这是设置你登录系统时用的账号。“你的姓名”可以填你的名字或昵称。“你的计算机名”会自动生成你可以改一个简单的比如“noi-pc”。“用户名”会用来作为终端命令行的前缀和家目录的名称建议用英文小写比如你的名字拼音。“密码”需要输入两次。为了方便比赛和练习我建议在下面选择“自动登录”。这样每次启动虚拟机就会直接进入桌面省去输入密码的步骤。当然如果你担心安全问题可以不选。设置完成后点击“继续”。现在安装程序就开始正式往虚拟硬盘里拷贝文件了。这个过程大概需要10-20分钟取决于你电脑的性能。期间屏幕会播放一些Ubuntu的介绍幻灯片。请继续保持网络断开状态直到安装完成。安装完成后会提示“安装完毕需要重启”。点击“现在重启”。虚拟机可能会提示你“请移除安装介质然后按回车键”。这时我们不需要手动去“弹出”光盘只需要在VirtualBox窗口的顶部菜单栏选择“设备” - “光驱” - “移除虚拟盘”将那个ISO镜像文件从虚拟光驱中卸载掉然后按键盘上的回车键。虚拟机就会重新启动进入全新的NOI Linux 2.0系统桌面。5. 首次启动后的必要设置与验证当你看到带有NOI Logo的紫色桌面背景时恭喜你NOI Linux 2.0系统已经成功安装并运行起来了但这还不算完为了让这个环境用起来更顺手、更符合比赛习惯我们还需要进行一些简单的初始设置和环境验证。首先我们需要安装VirtualBox的“增强功能”。这个功能非常重要它能实现鼠标在虚拟机和Windows主机之间的无缝切换不用再按那个麻烦的Host键了、共享剪贴板、以及自适应调整虚拟机窗口大小。点击VirtualBox窗口顶部菜单栏的“设备”选择“安装增强功能”。这时虚拟机会自动加载一个虚拟光盘。通常系统会自动弹出一个对话框询问你是否运行点击“运行”即可。如果没有弹出你需要手动打开桌面上的“VBOXADDITIONS”光盘图标在里面找到名为VBoxLinuxAdditions.run的文件右键点击它选择“运行”。运行过程中需要输入你的用户密码。安装完成后根据提示重启虚拟机。重启后你会发现鼠标可以自由进出虚拟机窗口并且可以随意拖动窗口改变大小了。接下来验证核心竞赛环境。我们要确认所有比赛需要的工具都就位了。打开桌面左上角的“应用程序”菜单找到“编程”分类你应该能看到预装的Code::Blocks IDE这是一个C/C集成开发环境。然后我们需要打开终端快捷键CtrlAltT输入几个关键命令来检查编译器版本g --version gdb --version python3 --version分别执行后你应该能看到类似g (Ubuntu 9.3.0-17ubuntu1~20.04) 9.3.0和Python 3.8.10的输出。这个版本号必须和NOI官方公布的要求一致。如果显示命令未找到那说明安装可能有问题但官方镜像一般不会出现这种情况。然后我们测试一个最简单的“Hello, World!”程序。在终端里用vim或gedit创建一个文件gedit test.cpp在打开的编辑器里输入#include iostream using namespace std; int main() { cout Hello, NOI Linux! endl; return 0; }保存并关闭编辑器。回到终端编译并运行它g test.cpp -o test ./test如果屏幕上成功打印出“Hello, NOI Linux!”那么恭喜你你的C编译环境完全正常。最后我建议做一个快照Snapshot。这是虚拟机的“后悔药”功能。在VirtualBox管理界面选中你的NOI Linux 2.0虚拟机点击右上角的“快照”按钮然后点击“拍摄快照”。给它起个名字比如“初始纯净状态”描述可以写“安装增强功能后验证环境正常”。这样以后无论你在虚拟机里怎么练习、安装软件甚至误操作搞乱了系统都可以一键恢复到此刻这个完美、干净的状态。这对于长期备赛来说是个能省下大量重装时间的好习惯。6. 高效使用虚拟机的技巧与资源管理环境搭好了怎么用得舒服、用得高效才是关键。虚拟机毕竟是在你电脑里再运行一个完整的系统如果设置不当可能会觉得卡顿或者文件传递不方便。这里我分享几个实战中总结出来的技巧能极大提升你的使用体验。性能调优如果你感觉虚拟机运行不够流畅可以尝试调整一些设置。关闭虚拟机在VirtualBox管理界面选中它点击“设置”。在“系统” - “处理器”选项卡里你可以分配更多的CPU核心给虚拟机。如果你的电脑是4核或6核处理器分配2个核心给虚拟机会让编译速度明显加快。在“显示” - “屏幕”选项卡里将“显存大小”拉到最大通常是128MB并勾选“启用3D加速”。这些设置能改善图形界面的响应速度。不过要注意分配的资源不能超过你电脑物理硬件的实际能力否则主机和虚拟机都会变卡。共享文件夹与剪贴板这是打通虚拟机和Windows主机的“高速公路”。我们之前安装的“增强功能”已经启用了双向剪贴板你可以在虚拟机和Windows之间直接复制粘贴文字。但文件传输还需要设置“共享文件夹”。在虚拟机运行状态下点击VirtualBox菜单栏的“设备” - “共享文件夹” - “共享文件夹设置”。点击右边带加号的文件夹图标“文件夹路径”选择你Windows系统上的一个文件夹比如“D:\NOI_Share”“文件夹名称”可以简单设为“share”并勾选“自动挂载”和“固定分配”。点击“确定”后回到虚拟机桌面你会在文件管理器的侧边栏看到这个共享文件夹通常位于/media/目录下或者有一个sf_share的链接。现在你可以把Windows里的题目、数据文件直接丢进这个共享文件夹在虚拟机里就能立即访问编译好的程序也可以放回去非常方便。备份与迁移你的虚拟机环境会随着练习变得越来越重要。定期备份虚拟机磁盘文件那个.vdi文件是个好习惯。更优雅的方式是使用VirtualBox的“导出”功能。关闭虚拟机在管理界面选中它点击菜单“管理” - “导出虚拟电脑”。你可以选择只导出当前状态或者包含多个快照。导出的文件是一个.ova格式的单一包你可以把它拷贝到U盘、网盘在任何安装了VirtualBox的电脑上通过“导入”功能瞬间恢复出完全一样的竞赛环境。这对于在学校机房和家里电脑之间同步环境特别有用。日常练习流程建议我建议你养成这样的工作流在Windows的共享文件夹里创建每个题目的目录比如“NOIP2021_junior_problem1”。在这个目录里存放题目描述.pdf、你的源代码.cpp和测试数据。然后在虚拟机里通过共享文件夹访问这个目录进行编辑、编译和测试。所有工作成果都保留在Windows硬盘上安全且易于管理。虚拟机只作为一个纯净、标准的编译和运行沙盒。这样即使某天虚拟机出了问题你的代码和资料也毫发无损。