任务 1:装好 WSL2、Ubuntu、VS Code,建好 GitHub 仓库
从零开始,在 Windows 上装出一个能写 Linux C++ 程序的环境,并把第一份代码推到 GitHub。每一步都给出要输入的命令和你应该看到的结果。
这篇做完你会得到: 一个 Ubuntu 终端;在 VS Code 里写的代码实际跑在 Linux 上;GitHub 上有一个叫
cpp-practice的仓库,里面有你的第一次提交。预计用时: 1.5 到 3 小时,大部分时间在等下载。
先搞清楚:为什么要装这些
我们要写的服务器用到 epoll,这是 Linux 独有的系统调用,Windows 上根本没有。所以代码必须在 Linux 上编译和运行。
你不需要把电脑重装成 Linux。Windows 自带一个叫 WSL2(Windows Subsystem for Linux)的功能,可以在 Windows 里面跑一个真正的 Linux 系统,和 Windows 共享文件,开关都很快。
用到的东西和它们的作用:
| 东西 | 是什么 | 用来干嘛 |
|---|---|---|
| WSL2 | Windows 里的 Linux 运行环境 | 提供 Linux 内核 |
| Ubuntu | 一个 Linux 发行版 | 我们实际用的 Linux 系统 |
| VS Code | 代码编辑器 | 写代码 |
| VS Code 的 WSL 插件 | 让 VS Code 连进 WSL | 在 Windows 的编辑器里改 Linux 里的文件 |
| git | 版本管理工具 | 记录代码的每次修改 |
| GitHub | 放 git 仓库的网站 | 备份代码,面试官会看 |
如果你用的是 Mac: 跳过 WSL,直接装 Homebrew 和 VS Code。但 Mac 也没有 epoll,你需要一台 Linux 云服务器(你已经有了,ochresign.com 那台),用 VS Code 的 Remote-SSH 插件连上去写代码。后面的步骤里 Ubuntu 的部分照样做。
第 1 步:检查 Windows 版本
WSL2 需要 Windows 10 版本 2004 以上,或者 Windows 11。
- 按键盘上的
Win + R,弹出“运行”窗口。 - 输入
winver,回车。 - 弹出的窗口里会写“版本 22H2(OS 内部版本 19045.xxxx)”这样的字。
内部版本号大于等于 19041 就可以。Windows 11 一定可以。
第 2 步:安装 WSL2 和 Ubuntu
- 点开始菜单,输入
PowerShell。 - 在搜索结果“Windows PowerShell”上点右键,选以管理员身份运行。弹出“是否允许此应用更改设备”,点是。
- 在蓝色(或黑色)窗口里输入下面这行,回车:
wsl --install -d Ubuntu-24.04
你应该看到它在下载和安装,类似:
正在安装: 虚拟机平台
已安装 虚拟机平台。
正在安装: 适用于 Linux 的 Windows 子系统
...
正在下载: Ubuntu 24.04 LTS
请求的操作成功。直到重新启动系统前更改将不会生效。
- 重启电脑。 这一步不能跳过。
- 重启后,会自动弹出一个黑色窗口继续安装 Ubuntu。如果没弹出来,就在开始菜单里搜
Ubuntu打开它。 - 它会让你设置用户名和密码:
Enter new UNIX username: xiao
New password:
Retype new password:
注意:输入密码时屏幕上什么都不显示,连星号都没有,这是正常的。 直接盲打完回车就行。这个密码以后用 sudo 时要输入,记住它。用户名只能用小写英文字母。
- 看到下面这样的提示符,说明你已经在 Linux 里了:
xiao@DESKTOP-ABC123:~$
这一行的意思是:用户 xiao,在名叫 DESKTOP-ABC123 的机器上,当前目录是 ~(你的家目录,也就是 /home/xiao),$ 表示可以输入命令了。
常见报错:
- 提示
0x80370102或者“请启用虚拟机平台”:电脑 BIOS 里没开虚拟化。重启进 BIOS(开机时按 F2 或 Del,不同品牌不一样,搜一下“你的电脑型号 + 开启 VT”),找到Intel Virtualization Technology或SVM Mode,改成 Enabled,保存重启。 - 提示
wsl不是命令:Windows 版本太老,去“设置 → Windows 更新”更新系统。 - 下载特别慢或失败:换个网络,或者打开微软商店搜 “Ubuntu 24.04” 直接安装。
第 3 步:确认装的是 WSL2
回到PowerShell(不是 Ubuntu 窗口),输入:
wsl -l -v
你应该看到:
NAME STATE VERSION
* Ubuntu-24.04 Running 2
最后一列必须是 2。如果是 1,执行 wsl --set-version Ubuntu-24.04 2,等它转换完。
第 4 步:在 Ubuntu 里装开发工具
回到 Ubuntu 窗口。下面的命令一行一行复制进去执行(在 Ubuntu 窗口里粘贴是点鼠标右键,不是 Ctrl+V)。
先更新软件列表并升级已有的软件:
sudo apt update
sudo apt upgrade -y
sudo 的意思是“用管理员权限执行”,第一次会问你密码,输入第 2 步设的那个(同样不显示)。apt 是 Ubuntu 的软件管理器,相当于应用商店。-y 表示遇到“是否继续”时自动回答“是”。
然后装我们要用的所有工具:
sudo apt install -y build-essential gdb cmake git netcat-openbsd python3 tcpdump
它们分别是:build-essential 包含 g++ 编译器和 make;gdb 是调试器;cmake 是构建工具;git 是版本管理;netcat-openbsd 提供 nc 命令,用来手动连服务器;python3 跑测试脚本;tcpdump 用来抓包看三次握手。
装完后检查一下版本,每行都应该打印出版本号,而不是 command not found:
g++ --version
gdb --version
cmake --version
git --version
你应该看到类似:
g++ (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0
GNU gdb (Ubuntu 15.0.50.20240403-0ubuntu1) 15.0.50.20240403-git
cmake version 3.28.3
git version 2.43.0
版本号不用完全一样,g++ 只要 9 以上就行。
第 5 步:认识 Linux 和 Windows 的文件在哪
在 Ubuntu 里:
- 你的家目录是
/home/xiao,简写为~。代码全部放这里。 - Windows 的 C 盘在
/mnt/c/,比如桌面是/mnt/c/Users/你的Windows用户名/Desktop。
不要把代码放在 /mnt/c/ 下面。 跨系统读写文件非常慢,编译会慢好几倍,还可能遇到权限和换行符的怪问题。
在 Windows 的文件资源管理器里,左侧栏最下面会有一个企鹅图标的 Linux,点进去就能看到 Ubuntu 里的文件。
建一个放练习代码的目录:
mkdir -p ~/code/cpp-practice
cd ~/code/cpp-practice
pwd
mkdir -p 创建目录(-p 表示中间的目录不存在就一起创建);cd 进入目录;pwd 打印当前在哪。最后应该输出 /home/xiao/code/cpp-practice。
第 6 步:安装 VS Code 并连上 WSL
- 在 Windows 上打开 https://code.visualstudio.com/,下载安装。安装时勾上“添加到 PATH”(默认是勾上的)。
- 打开 VS Code,点左侧栏的方块图标(扩展),搜索并安装这三个插件: - WSL(作者 Microsoft) - C/C++(作者 Microsoft) - CMake Tools(作者 Microsoft)
- 关掉 VS Code。回到 Ubuntu 窗口,在
~/code/cpp-practice目录里输入:
code .
. 表示“当前目录”。第一次执行会自动在 Linux 里装一个 VS Code 的服务端,等它跑完。然后会弹出 VS Code 窗口。
- 看 VS Code 左下角,应该有一个蓝色或绿色的标签写着
WSL: Ubuntu-24.04。这说明 VS Code 已经连进了 Linux,你在里面打开的终端(菜单 终端 → 新建终端,快捷键Ctrl + `)也是 Linux 终端。 - 在 VS Code 里装的 C/C++ 插件,如果提示“在 WSL 中安装”,点安装。插件要在 Linux 那边也装一份才能用。
以后每天开始写代码的流程就是:打开 Ubuntu,cd 到项目目录,code .。或者直接在 VS Code 里点左下角的蓝色按钮选“连接到 WSL”。
第 7 步:配置 git
告诉 git 你是谁,每次提交都会记录这个名字和邮箱。邮箱用你注册 GitHub 的那个:
git config --global user.name "xiao"
git config --global user.email "你的邮箱@example.com"
git config --global init.defaultBranch main
最后一行让新仓库的默认分支叫 main,和 GitHub 保持一致。
检查:
git config --global --list
应该能看到刚才设的三项。
第 8 步:生成 SSH 密钥,让电脑能推代码到 GitHub
推代码到 GitHub 需要证明“你是你”。最省事的办法是 SSH 密钥:在电脑上生成一对钥匙,私钥留在电脑上,公钥交给 GitHub。
- 生成密钥(邮箱换成你自己的):
ssh-keygen -t ed25519 -C "你的邮箱@example.com"
它会连问三个问题,全部直接回车,用默认值、不设密码:
Enter file in which to save the key (/home/xiao/.ssh/id_ed25519):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
- 打印公钥:
cat ~/.ssh/id_ed25519.pub
会输出一行以 ssh-ed25519 开头、以你的邮箱结尾的文字。用鼠标选中整行复制(Ubuntu 窗口里选中就是复制)。
注意文件名带 .pub 的是公钥,可以给别人;不带 .pub 的 id_ed25519 是私钥,永远不要发给任何人,也不要提交到仓库里。
-
浏览器打开 GitHub,点右上角头像 → Settings → 左侧 SSH and GPG keys → 绿色按钮 New SSH key。Title 随便写(比如
my-laptop-wsl),Key 里粘贴刚才复制的那一行,点 Add SSH key。 -
回到 Ubuntu 测试:
ssh -T git@github.com
第一次会问:
Are you sure you want to continue connecting (yes/no/[fingerprint])?
输入 yes 回车。然后应该看到:
Hi Makima667! You've successfully authenticated, but GitHub does not provide shell access.
看到 successfully authenticated 就成功了。后半句“不提供 shell 访问”是正常的。
第 9 步:在 GitHub 上建仓库
- GitHub 右上角 + → New repository。
- Repository name 填
cpp-practice。 - 选 Private(私有)还是 Public(公开)都行。练习仓库可以先私有;正式项目(阶段 1 开始的网络库)建议公开,面试官要能看到。
- 下面的 “Add a README file”、“.gitignore”、“license” 全都不要勾。 我们要从本地推一个仓库上去,远程是空的最省事。
- 点 Create repository。
建好后页面上有一段 “…or push an existing repository from the command line”,里面有一个 git@github.com:你的用户名/cpp-practice.git 这样的地址,后面要用。
第 10 步:写第一份代码并推上去
回到 VS Code(已经连着 WSL,打开的是 ~/code/cpp-practice)。
- 左侧文件栏点“新建文件”,命名为
hello.cpp,内容:
#include <iostream>
int main() {
std::cout << "hello, linux" << std::endl;
return 0;
}
按 Ctrl + S 保存。
- 在 VS Code 的终端里编译并运行:
g++ -o hello hello.cpp
./hello
应该输出 hello, linux。-o hello 指定输出文件名;./hello 表示运行当前目录下的 hello,./ 不能省略。
- 新建一个
.gitignore文件,告诉 git 哪些文件不要管(编译出来的可执行文件不应该进仓库):
hello
build/
*.o
- 把这个目录变成 git 仓库,并做第一次提交:
git init
git add hello.cpp .gitignore
git status
git status 会显示两个绿色的文件,说明它们已经“暂存”,准备提交。继续:
git commit -m "Add hello world"
- 关联 GitHub 上的仓库并推送(把地址换成你自己的):
git remote add origin git@github.com:Makima667/cpp-practice.git
git push -u origin main
应该看到类似:
Enumerating objects: 4, done.
...
To github.com:Makima667/cpp-practice.git
* [new branch] main -> main
branch 'main' set up to track 'origin/main'.
- 刷新 GitHub 的仓库页面,应该能看到
hello.cpp和.gitignore。
以后每天的 git 流程
改完代码后,三条命令:
git add -A # 把所有改动加入暂存区
git commit -m "说清楚这次改了什么" # 提交,消息要写具体
git push # 推到 GitHub
提交消息要写具体,比如 Add epoll echo server,不要写 update、1、fix。面试官翻提交记录时,这能看出你的工程习惯。
检查清单
全部打勾,这个任务就完成了:
-
wsl -l -v显示 VERSION 是 2 -
g++ --version、gdb --version、cmake --version都能打印版本 - VS Code 左下角显示
WSL: Ubuntu-24.04 -
ssh -T git@github.com显示 successfully authenticated - GitHub 上的
cpp-practice仓库里能看到hello.cpp
自测
为什么代码要放在 ~/code 下面,而不是 /mnt/c/Users/...?
/mnt/c 是通过跨系统的文件共享访问 Windows 的磁盘,读写很慢,编译会慢好几倍,还可能遇到文件权限和换行符的问题。放在 Linux 自己的家目录里最快。
id_ed25519 和 id_ed25519.pub 哪个可以发给别人?
只有 .pub 结尾的公钥可以给别人(比如贴到 GitHub)。不带后缀的是私钥,谁拿到它谁就能以你的身份推代码,绝对不能泄露或提交到仓库。
为什么编译出来的 hello 要写进 .gitignore?
它是由源码生成的,任何人拿到源码都能重新编译出来;而且它是二进制文件,每次编译都会变,提交进去只会让仓库变大、提交记录变乱。仓库里只放源码和构建脚本。
面试常问
你平时在什么环境下开发?用过 Linux 吗?
参考回答: 我在 Windows 上用 WSL2 跑 Ubuntu 24.04 做开发,编辑器是 VS Code 连 WSL,编译用 g++ 和 CMake,调试用 gdb。项目部署在一台 Linux 云服务器上,平时用 SSH 登录维护,常用的命令比如看进程、看端口、看日志都比较熟。
提醒: 只说你真的会的。说了“熟悉 Linux”,面试官很可能接着问“怎么查一个端口被谁占用”“怎么看一个进程打开了多少个 fd”。
WSL2 和虚拟机有什么区别?
参考回答: WSL2 本质上也是虚拟化,它在一个轻量级的 Hyper-V 虚拟机里运行真正的 Linux 内核,所以系统调用和原生 Linux 一致,epoll 这些都能用。和 VMware 这类传统虚拟机相比,它启动快、占内存少,和 Windows 的文件系统、网络集成得更好,不需要单独装桌面系统。WSL1 则不是虚拟机,它是把 Linux 系统调用翻译成 Windows 的调用,兼容性差一些。