
GPU 是甜的,Windows 是苦的,rsync
是必须的
一直以来,我在 Linux 服务器之间,以及 macOS 和服务器之间,都是用
rsync
来同步和备份数据的,稳定、高效、优雅。最近为了跑 AI 模型,特地组了一台带 GPU 的 PC。然而系统是 Windows,用起来实在各种不习惯。虽然为了那颗 GPU,我强忍着留在 Win 下,但最让我抓狂的,是 没法直接用
rsync
。我试过 SFTP、cwRsync、WinSCP……各种工具,体验都不如意。直到有一天我突然意识到:Windows 是可以装 WSL 的!
于是我认真翻阅了官方 WSL 文档,亲手折腾了一番,现在终于把
rsync
和 Linux 工具链优雅地搬回来了。本文就是对这段过程的一些经验整理,希望能帮到也在 Win+GPU 下挣扎的你。
WSL (Windows Subsystem for Linux) 新手入门完全指南
欢迎来到 Linux 的世界!WSL 是一个神奇的工具,让你可以在 Windows 系统上无缝地运行一个真实的 Linux 环境。
第一部分:核心概念与注意事项 (必读!)
-
文件系统是独立的,但可以互通
- 你的 Windows 文件位于
/mnt/
目录下。例如,C 盘是/mnt/c/
,D 盘是/mnt/d/
。 - ⚠️ 绝对不要用 Windows 的文件资源管理器去修改 Linux 系统内部的文件(比如
/home
,/etc
等目录下的文件),这会破坏文件权限导致 WSL 损坏! - 反过来,从 Linux 内部去访问和修改
/mnt/c/
下的 Windows 文件是完全安全的。
- 你的 Windows 文件位于
-
Linux 区分大小写
- 在 Linux 中,
File.txt
,file.txt
,FILE.txt
是三个不同的文件。
- 在 Linux 中,
-
路径分隔符是正斜杠
/
- Windows 用
\
(例如C:\Users\WT
)。 - Linux 用
/
(例如/mnt/c/Users/WT
)。
- Windows 用
-
sudo
: “超级管理员权限”- 在 Linux 中,安装软件、修改系统配置等操作需要管理员权限。
sudo
命令就是临时获取这个权限。 - 用法:
sudo [要执行的命令]
,例如sudo apt update
。系统会提示你输入密码。
- 在 Linux 中,安装软件、修改系统配置等操作需要管理员权限。
-
Tab 键是你的“神之按键”
- 在终端输入命令或路径时,按
Tab
键可以自动补全。如果候选项有多个,按两次Tab
会全部列出来。这能极大地提高效率并避免拼写错误。
- 在终端输入命令或路径时,按
第二部分:基础文件与目录操作 (每天都用)
命令 | 功能说明 | 常用示例 | 小白提示 |
---|---|---|---|
pwd | Print Working Directory (显示当前在哪) | pwd | 迷路了就用它。 |
ls | List (列出文件和文件夹) | ls (列出当前目录)ls -l (显示详细信息)ls -a (显示所有文件,包括隐藏的)ls -lh (人性化显示文件大小) | -lha 可以组合使用。蓝色通常是目录,白色是文件。 |
cd | Change Directory (切换目录) | cd /mnt/c/Users cd .. (去上一级目录)cd ~ 或 cd (回自己的主目录, /home/你的用户名 ) | 路径带空格要用引号: cd "My Documents" 。 |
mkdir | Make Directory (创建新文件夹) | mkdir my_project | |
touch | 创建一个空文件或更新文件时间 | touch new_file.txt | 如果文件已存在,只会更新它的修改时间。 |
cp | Copy (复制文件或文件夹) | cp a.txt b.txt (复制文件)cp -r my_folder /mnt/c/ (复制文件夹) | 复制文件夹必须加 -r (recursive)。 |
mv | Move (移动或重命名文件/文件夹) | mv a.txt /mnt/c/ (移动)mv a.txt b.txt (重命名) | 是移动还是重命名,取决于目标是否存在。 |
rm | Remove (删除文件) | rm file.txt | |
rmdir | Remove Directory (删除空文件夹) | rmdir empty_folder | 只能删除空的文件夹。 |
rm -r | 删除文件夹及其内所有内容 | rm -r my_project | ⚠️ 极度危险! rm -rf / 会删掉你的整个系统!没有回收站,删除前请三思! |
第三部分:WSL 与 Windows 交互 (神技)
命令 | 功能说明 | 常用示例 |
---|---|---|
wsl --shutdown | (在 PowerShell/CMD 中) 立即彻底关闭 WSL | wsl --shutdown |
wsl -l -v | (在 PowerShell/CMD 中) 查看所有 WSL 发行版及其状态 | wsl -l -v |
explorer.exe . | (在 Linux 终端中) 用 Windows 文件资源管理器打开当前目录 | explorer.exe . |
cmd.exe / powershell.exe | (在 Linux 终端中) 直接运行 Windows 命令 | powershell.exe Get-Date |
第四部分:软件管理 (Ubuntu/Debian 使用 apt
)
命令 | 功能说明 |
---|---|
sudo apt update | 更新软件包列表。安装任何新软件前的第一步,好习惯。 |
sudo apt upgrade | 升级所有已安装的软件包。建议定期执行。 |
sudo apt install [包名] | 安装一个新软件。例如 sudo apt install nodejs 。 |
sudo apt remove [包名] | 卸载一个软件。 |
apt search [关键词] | 搜索可用的软件包。 |
dpkg -s [包名] | 检查某个软件包是否已安装及其状态。 |
第五部分:实用工具与命令
命令 | 功能说明 | 常用示例 |
---|---|---|
nano | 一个非常简单易用的命令行文本编辑器 | nano file.txt (Ctrl+X 退出, 会提示是否保存) |
cat | 查看简短的文本文件内容 | cat file.txt |
grep | 在文件中搜索文本 | grep "hello" file.txt |
man | Manual (查看命令的帮助手册) | man ls (按 q 退出) |
clear | 清空终端屏幕 | clear (快捷键 Ctrl+L) |
history | 查看你输入过的历史命令 | history |
top / htop | 实时查看系统进程和资源占用 | htop (比 top 更友好,需 sudo apt install htop ) |
ping | 测试网络连接 | ping baidu.com (按 Ctrl+C 停止) |
rsync | 功能强大的文件同步工具 | rsync -avz /path/to/source /path/to/destination |
建议
- 别害怕犯错:命令行最大的学习方式就是不断尝试。只要你不乱用
sudo rm -rf
,基本上不会有大问题。 - 从你的项目开始:最好的学习方法是学以致用。尝试在 WSL 里
cd
到你的 WindowsNodeJs
项目目录 (/mnt/c/Users/WT/Documents/NodeJs
),然后运行npm install
或node app.js
,亲身体验一下流程。 - 多用
Tab
,多用history
:让工具帮你偷懒。
WSL 完全指南 (补充章节): WSL 管理命令
运行环境: Windows PowerShell 或 命令提示符 (CMD) 核心作用: 管理你的WSL发行版(安装、卸载、备份、设置等),就像一个“宿主”在管理它的“房客”。
命令 | 功能说明 | 常用示例 | 小白提示与注意事项 |
---|---|---|---|
wsl -l -v wsl --list --verbose | 列出所有已安装的WSL发行版及其详细状态(运行中/已停止,WSL版本号)。 | wsl -l -v | 这是最重要的诊断命令,检查你的WSL环境是否正常的第一步。 |
wsl --shutdown | 立即关闭所有正在运行的WSL发行版。 | wsl --shutdown | 解决WSL卡顿或异常的“重启大法”。下次启动会稍慢一点。 |
wsl --unregister <发行版名> | 彻底卸载/注销一个发行版。 | wsl --unregister Ubuntu | ⚠️ 极度危险! 这是官方的、干净的删除方式。会删除该发行版的所有数据(你的ext4.vhdx 文件),且无法恢复! |
wsl --set-default <发行版名> wsl -s <发行版名> | 当你安装了多个发行版时,设置默认启动的那个。 | wsl -s Ubuntu | 默认发行版意味着你直接在CMD/PS里输入wsl 时会进入的系统。 |
wsl --install -d <发行版名> | 通过命令行安装一个新的发行版。 | wsl --install -d Debian | 你的Ubuntu很可能就是用这个命令安装的。比商店安装更快捷。 |
wsl --export <发行版名> <文件名> | 备份/导出一个发行版为.tar 压缩文件。 | wsl --export Ubuntu D:\backup\ubuntu_bak.tar | 神技!可以完整备份你的Linux环境,包括所有文件和已安装的软件。 |
wsl --import <新发行版名> <安装位置> <文件名> | 从.tar 备份文件恢复/导入一个发行版。 | wsl --import Ubuntu-Recover D:\WSL D:\backup\ubuntu_bak.tar | 备份恢复、迁移WSL环境到另一台电脑的神技。 |
为什么要区分这些命令?
- Ubuntu内部的命令 (
ls
,cd
,apt
等): 是在管理Linux这个操作系统内部的文件和软件。 - PowerShell/CMD中的
wsl
命令: 是在管理WSL这个虚拟环境本身。
这个区别就像:
- 你在你的房子里(Ubuntu)整理家具、打扫卫生 (
ls
,apt
)。 - 房东(Windows)在外面决定要不要把你的房子拆了 (
wsl --unregister
),或者给你断电重启 (wsl --shutdown
)。
WSL (终极管理篇)
这一部分包含的是对 WSL 平台本身进行深度配置和彻底移除的操作。请务必仔细阅读警告,因为错误的操作可能会影响你的 Windows 系统功能。
第一章:彻底卸载 WSL 本身 (而不仅仅是Linux系统)
当你不再需要任何 Linux 环境,并希望将 WSL 从你的 Windows 系统中完全移除时,你需要卸载 WSL 这个Windows 功能组件。
操作本质: 这不是删除一个“程序”,而是关闭一个 Windows 的核心功能。
操作方法 (二选一):
方法A: 使用图形界面 (推荐给新手)
- 按下
Win
键,搜索 “启用或关闭 Windows 功能” (Turn Windows features on or off),并打开它。 - 在弹出的窗口中,向下滚动,找到并取消勾选以下两项:
- 适用于 Linux 的 Windows 子系统 (Windows Subsystem for Linux)
- 虚拟机平台 (Virtual Machine Platform) (WSL 2 依赖于此)
- 点击“确定”,系统会进行配置更改,然后要求你重启电脑。重启后,WSL 功能将被完全禁用。
方法B: 使用 PowerShell (管理员模式)
-
右键点击“开始”菜单,选择 “Windows PowerShell (管理员)” 或 “终端 (管理员)”。
-
依次执行以下两条命令,分别禁用 WSL 和虚拟机平台功能:
Terminal window # 禁用 WSL 功能Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux# 禁用虚拟机平台功能Disable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform -
根据提示,输入
Y
并回车,重启你的电脑以完成卸载。
⚠️ 警告:
- 这是一个彻底的、影响系统全局的操作。
- 它会让你所有已安装的 Linux 发行版都无法访问。
- 这不会自动删除你之前找到的
ext4.vhdx
文件,但它们会变成无法使用的“孤儿”文件,你可以在卸载后手动删除它们以释放空间。
第二章:手动配置资源 (CPU, 内存) 与网络模式
这些高级配置都是通过一个全局配置文件来完成的。
配置文件: .wslconfig
文件位置: 你的 Windows 用户主目录下,即 C:\Users\你的用户名\.wslconfig
。
如果文件不存在: 手动创建一个纯文本文件并以此命名即可。
操作流程:
- 在
C:\Users\WT\
目录下创建一个名为.wslconfig
的文件。 - 用记事本或任何文本编辑器打开它。
- 将下面的配置内容根据你的需求修改后,粘贴进去。
- 保存文件。
- 在 PowerShell 中运行
wsl --shutdown
来关闭 WSL,使配置生效。 下次启动 WSL 时就会加载新配置。
2.1 手动分配 CPU 和内存
# 表示这是 WSL 2 的配置[wsl2]
# 内存限制:分配 6GB 内存给 WSLmemory=6GB
# CPU 核心数限制:分配 4 个处理器核心给 WSLprocessors=4
# 交换空间:设置 8GB 的交换分区 (如果内存不足时使用)swap=8GB
- 你可以根据自己电脑的配置(比如你有16GB内存,8个核心)来合理分配。不写则使用默认值。
2.2 网络配置:与宿主机共享IP (镜像模式)
这是解决 localhost
访问和复杂端口转发问题的终极方案。
传统模式 (NAT): WSL 有一个自己独立的虚拟IP地址,与 Windows 主机不在一个网段。 镜像模式 (Mirrored): WSL 直接使用 Windows 的网络,拥有和 Windows 完全相同的IP地址。
在 .wslconfig
文件中添加以下内容:
# 在 [wsl2] 下面添加networkingMode=mirrored
# 建议同时开启以下两项以获得最佳体验dnsTunneling=true # 改善 DNS 解析autoProxy=true # 自动使用 Windows 的代理设置
配置好后的 .wslconfig
完整示例可能像这样:
[wsl2]memory=6GBprocessors=4networkingMode=mirroreddnsTunneling=trueautoProxy=true
⚠️ 警告:
- 镜像网络模式是较新的功能,需要你的 Windows 11 版本较新才能支持。
- 修改任何配置后,必须
wsl --shutdown
重启 才能生效!
总结
现在,我把 WSL 知识库可以说是“武装到了牙齿”!
- 你知道了如何操作 Linux 内部 (
ls
,apt
…)。 - 你知道了如何管理 Linux 发行版 (
wsl --unregister
,wsl --export
…)。 - 你知道了如何配置 WSL 核心资源 (通过
.wslconfig
文件)。 - 你甚至知道了如何从 Windows 中彻底移除 WSL。
WSL (专家秘籍篇)
秘籍一:IDE 的无缝集成 (VS Code 篇)
这是 90% 的开发者最需要,但最容易忽略的设置。它能让你在 Windows 的舒适UI下,使用 Linux 的全部编译、运行和调试能力。
- 缺失的知识点: 如何配置 Visual Studio Code 以原生方式在 WSL 中开发。
- 核心工具: VS Code 扩展 “Remote - WSL”。
- 工作原理 (魔法所在):
- 你的 VS Code 主程序(UI界面)运行在 Windows 上。
- 当你打开一个 WSL 项目时,VS Code 会在你的 Ubuntu 里自动安装并运行一个轻量的“VS Code Server”。
- 你的所有操作(代码编辑、终端命令、调试、Git操作)都通过这个 Server 直接在 Linux 环境中执行。
- 如何操作:
- 在 Windows 上安装 VS Code。
- 在 VS Code 的扩展市场里搜索并安装 “Remote - WSL”。
- 点击左下角的绿色
><
图标,选择 “Connect to WSL”。 - 现在,你在 VS Code 里打开的任何文件夹、运行的任何终端,都已经是 100% 的 Linux 环境了!
秘籍二:启用 Systemd (让你的 Linux 活起来)
默认情况下,WSL 不启动传统的 systemd
进程,这意味着你无法像在标准服务器上那样使用 systemctl
来管理服务(如启动数据库、Web服务器)。
-
缺失的知识点: 如何在 WSL 中启用
systemd
支持,使其表现得更像一个完整的服务器。 -
配置文件:
/etc/wsl.conf
(注意:这是在 Ubuntu 内部,与 Windows 的.wslconfig
不同!) -
如何操作:
-
在你的 Ubuntu 终端里,编辑
/etc/wsl.conf
文件(如果不存在就创建它):Terminal window sudo nano /etc/wsl.conf -
在文件中加入以下内容:
[boot]systemd=true -
保存文件 (在 nano 中是
Ctrl+X
,Y
,Enter
)。 -
回到 PowerShell,运行
wsl --shutdown
。 -
重启 Ubuntu,现在你就可以使用
sudo systemctl status ssh
或sudo systemctl start nginx
这样的命令了!
-
秘籍三:运行 Linux 图形界面程序 (WSLg)
是的,你甚至不需要折腾复杂的 X Server 设置,就可以直接在 Windows 桌面上运行 Linux 的 GUI 程序。
-
缺失的知识点: 如何利用内置的 WSLg (Windows Subsystem for Linux GUI) 功能。
-
前提条件: Windows 11 (该功能已内置)。
-
如何操作 (简单到难以置信):
-
确保你的 WSL 是最新的 (
wsl --update
)。 -
在 Ubuntu 里安装一个 GUI 程序,比如 Gedit 文本编辑器:
Terminal window sudo apt updatesudo apt install gedit -y -
直接在终端里输入程序名并回车:
Terminal window gedit -
稍等片刻,一个原生的 Linux Gedit 窗口就会神奇地出现在你的 Windows 桌面上!它甚至有自己的图标在任务栏上。
-
秘籍四:高级磁盘管理
我们找到了 ext4.vhdx
,但如果它太大了怎么办?或者我想把其他硬盘挂载到 WSL 里呢?
-
缺失的知识点: 如何压缩虚拟硬盘和挂载其他物理磁盘。
-
压缩 VHDX:
-
Linux 端: 运行
sudo fstrim -av
来清理未使用空间。 -
Windows 端 (PowerShell): 运行
wsl --shutdown
。然后使用diskpart
工具来压缩。Terminal window # 进入 diskpartdiskpart# 选择你的虚拟磁盘select vdisk file="C:\path\to\your\ext4.vhdx"# 压缩它compact vdisk# 退出exit
-
-
挂载其他物理磁盘/分区:
-
使用
wsl --mount
命令。例如,将物理硬盘2的第一个分区挂载进来:Terminal window # 首先查看所有磁盘wmic diskdrive list brief# 假设要挂载 \\.\PHYSICALDRIVE1 的分区1wsl --mount \\.\PHYSICALDRIVE1 --partition 1
-
最终的总结
- 基础操作 (文件、软件)
- WSL管理 (注册、开关、备份)
- 核心配置 (CPU、内存、网络)
- 卸载流程 (组件级移除)
- 专家实践 (IDE集成、Systemd、GUI、高级磁盘管理)
这下……这下我真的觉得它接近“完整”了。除非……你还想讨论如何从源码编译自己的 WSL 内核?
WSL 终极奥义:压箱底的绝世秘籍
秘籍一:【内功心法 · 乾坤大挪移】—— 极致性能调优
你不知道的真相:在 WSL 中,访问 Linux 文件系统(~/
或 /home/lolee
)和访问挂载的 Windows 文件系统(/mnt/c/...
)之间,存在着天壤之别的性能差距。
-
心法口诀: “内练一口气,外练筋骨皮”。
- 内(Linux文件系统 / ext4): 运行速度极快。文件操作、Git状态检查、NPM安装等,快如闪电。
- 外(Windows文件系统 / NTFS): 运行速度较慢。因为每次文件访问都需要在 Linux 和 Windows 之间进行元数据转换和协议通信,开销巨大。
-
绝招施展:
- 永远,永远将你的代码仓库(Git Repos)和项目文件(Node.js, Python等)存放在 Linux 的主目录里!
- 错误示范:
cd /mnt/c/Users/WT/Documents/NodeJs
然后npm install
。 (慢!) - 正确示范: 在 Ubuntu 终端里
cd ~
,然后mkdir projects
,再cd projects
,最后git clone ...
在这里进行所有开发。 (快!) - 你可以用
explorer.exe .
来从 Windows 文件资源管理器中快速访问它。
秘籍二:【身法奥义 · 移形换影】—— 终极无缝互操作
你以为 explorer.exe .
就是极限了?不,我们能做得更彻底。
-
心法口诀: “道生一,一生二,二生万物,万物归一”。让 Windows 和 Linux 融为一体。
-
绝招施展:
- 从 Windows 直接运行 Linux 命令: 按下
Win + R
(运行窗口),输入wsl ls -la ~
然后回车。你会看到一个命令行窗口一闪而过,并执行了ls
命令。这对于编写 Windows 批处理脚本 (.bat
) 来调用 Linux 工具链(如grep
,awk
,sed
)是无价的! - 路径的“翻译官”
wslpath
:- 在 Ubuntu 中,你想知道 Windows 路径
C:\Windows
对应的是什么?运行wslpath "C:\Windows"
,它会告诉你/mnt/c/Windows
。 - 反过来,在 Ubuntu 里,你想知道
/home/lolee
对应 Windows 能访问的UNC路径是什么?运行wslpath -w /home/lolee
,它会给你一个类似\\wsl$\Ubuntu\home\lolee
的路径,你可以直接粘贴到文件资源管理器地址栏访问!
- 在 Ubuntu 中,你想知道 Windows 路径
- 共享环境变量
WSLENV
:- 想让 Windows 的某个环境变量(比如
GOPATH
)能被 WSL 读取?在 Windows 中设置一个名为WSLENV
的环境变量,值为GOPATH/p
。/p
的意思是这个变量是一个路径,需要被 WSL 自动翻译。这样,你在 WSL 里也能用$GOPATH
了。
- 想让 Windows 的某个环境变量(比如
- 从 Windows 直接运行 Linux 命令: 按下
秘籍三:【护体神功 · 金刚不坏】—— 高级用户与安全策略
默认用户玩腻了?想用 root 登录或者创建其他用户?
-
心法口诀: “人有千面,法有万门”。
-
绝招施展:
- 以 root 身份登录: 在 PowerShell/CMD 中,使用
wsl -u root
命令。这会让你直接以root
用户身份进入 Ubuntu,拥有至高无上的权限,用于修复一些sudo
都搞不定的疑难杂症(比如修复sudo
本身)。 - 修改默认登录用户: 默认情况下,WSL 总是以你初次设置的用户登录。你可以通过修改 Windows 注册表来更改它(此招式过于高深,易走火入魔,通常用
wsl -u <其他用户名>
临时登录即可)。
- 以 root 身份登录: 在 PowerShell/CMD 中,使用
秘籍四:【心眼通明 · 洞察天机】—— 终极诊断
当你的 WSL 出现匪夷所思的问题,连 wsl --shutdown
都不管用时,你需要看到它最底层的呐喊。
-
心法口诀: “听风辨位,观星知命”。
-
绝招施展:
- 查看内核日志
dmesg
: 在 Ubuntu 终端里运行dmesg
命令。它会打印出 WSL Linux 内核启动以来的所有日志信息。如果出现 USB 设备挂载失败、网络接口异常等硬件层面的问题,线索往往就在这里。
- 查看内核日志
好了,这下,我真的倾囊相授了。
从入门的拳脚功夫,到管理的兵刃招式,再到内功心法和今日传授的旷世绝学,你已尽数习得。
如果连这些都满足不了你,那下一步,我们恐怕真的要一起去下载源码,编译一个属于我们自己的 WSL 内核了。
山下的世界,就交给你了!