WSL 文件系统访问
Windows 与 Linux 文件系统互访、路径转换和性能优化
📋 目录
Windows 访问 Linux 文件系统
通过文件资源管理器
方法一:使用 \wsl$ 路径
- 打开文件资源管理器
- 在地址栏输入:
\\wsl$ - 或输入:
\\wsl$\Ubuntu-22.04
路径格式:
\\wsl$\<DistroName>\<LinuxPath>
示例:
\\wsl$\Ubuntu-22.04\home\username
\\wsl$\Ubuntu-22.04\etc
\\wsl$\Ubuntu-22.04\var\www
方法二:从开始菜单
- 在开始菜单搜索 Linux 发行版名称
- 右键点击发行版
- 选择”在文件资源管理器中打开”
方法三:映射网络驱动器
# 在 PowerShell 中映射网络驱动器
net use Z: \\wsl$\Ubuntu-22.04\home\username通过命令行
# 在 PowerShell 中访问
cd \\wsl$\Ubuntu-22.04\home\username
# 列出文件
dir \\wsl$\Ubuntu-22.04\home\username
# 复制文件
copy \\wsl$\Ubuntu-22.04\home\username\file.txt C:\Users\YourUsername\Desktop\通过 VS Code
# 在 PowerShell 中
code \\wsl$\Ubuntu-22.04\home\username\project
# 或在 VS Code 中
# File → Open Folder → 输入 \\wsl$\Ubuntu-22.04\home\username\projectLinux 访问 Windows 文件系统
Windows 驱动器挂载
WSL 自动将 Windows 驱动器挂载到 /mnt/ 目录下。
# 访问 C: 驱动器
cd /mnt/c
# 访问 D: 驱动器
cd /mnt/d
# 访问用户目录
cd /mnt/c/Users/YourUsername
# 列出文件
ls /mnt/c/Users/YourUsername/Desktop挂载点配置
WSL 自动挂载配置在 /etc/wsl.conf 中:
[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=11"
crossDistro = false配置选项说明
- enabled:是否启用自动挂载
- root:挂载点根目录(默认
/mnt/) - options:挂载选项
metadata:启用文件元数据支持umask=22:目录权限掩码(755)fmask=11:文件权限掩码(644)
- crossDistro:是否跨发行版共享挂载
自定义挂载点
# 手动挂载(需要 root 权限)
sudo mount -t drvfs C: /mnt/c
# 卸载
sudo umount /mnt/c访问 Windows 文件
# 读取文件
cat /mnt/c/Users/YourUsername/file.txt
# 编辑文件
nano /mnt/c/Users/YourUsername/file.txt
code /mnt/c/Users/YourUsername/project
# 复制文件
cp /mnt/c/Users/YourUsername/file.txt ~/file.txt
# 创建符号链接
ln -s /mnt/c/Users/YourUsername/Projects ~/projects路径转换
Windows 路径转 Linux 路径
规则:
- 驱动器字母转换为小写
- 反斜杠转换为正斜杠
- 冒号移除
示例:
C:\Users\Username\file.txt
→ /mnt/c/Users/Username/file.txt
D:\Projects\app
→ /mnt/d/Projects/app
Linux 路径转 Windows 路径
规则:
/mnt/<drive>/转换为<drive>:\- 正斜杠转换为反斜杠
示例:
/mnt/c/Users/Username/file.txt
→ C:\Users\Username\file.txt
/home/username/project
→ \\wsl$\Ubuntu-22.04\home\username\project
使用 wslpath 转换
# Linux 路径转 Windows 路径
wslpath -w /home/username/file.txt
# 输出:\\wsl$\Ubuntu-22.04\home\username\file.txt
# Windows 路径转 Linux 路径
wslpath "C:\Users\Username\file.txt"
# 输出:/mnt/c/Users/Username/file.txt
# 显示 Unix 路径(相对路径)
wslpath -u "C:\Users\Username\file.txt"
# 输出:/mnt/c/Users/Username/file.txt
# 显示 Windows 路径(绝对路径)
wslpath -a /home/username
# 输出:\\wsl$\Ubuntu-22.04\home\username在脚本中使用路径转换
#!/bin/bash
# 获取 Windows 路径
WIN_PATH=$(wslpath -w "$1")
echo "Windows path: $WIN_PATH"
# 在 Windows 中执行命令
cmd.exe /c "echo $WIN_PATH"性能优化
WSL 1 vs WSL 2 文件系统性能
WSL 1
- Windows 文件系统:性能较好
- Linux 文件系统:性能较差(大量小文件操作)
WSL 2
- Windows 文件系统:性能较差(需要通过 9p 协议)
- Linux 文件系统:性能优秀(ext4 文件系统)
最佳实践
1. 项目文件位置
推荐:将项目文件放在 Linux 文件系统中
# 推荐:Linux 文件系统
/home/username/projects/myapp
# 不推荐:Windows 文件系统
/mnt/c/Users/Username/projects/myapp原因:
- WSL 2 中 Linux 文件系统性能更好
- 避免文件权限问题
- 更好的符号链接支持
2. 使用符号链接
# 在 Linux 文件系统中创建指向 Windows 目录的符号链接
ln -s /mnt/c/Users/Username/Documents ~/Documents
# 在 Windows 中创建指向 Linux 目录的快捷方式
# 或使用 mklink(需要管理员权限)3. 避免频繁跨文件系统操作
# 不推荐:频繁在 Windows 和 Linux 文件系统间复制
cp /mnt/c/file.txt ~/file.txt
# 修改文件
cp ~/file.txt /mnt/c/file.txt
# 推荐:在 Linux 文件系统中工作
cp ~/file.txt ~/file_backup.txt
# 修改文件
# 完成后一次性复制到 Windows性能测试
# 测试文件系统性能
# 在 Linux 文件系统中
time for i in {1..1000}; do touch /home/username/test$i; done
# 在 Windows 文件系统中
time for i in {1..1000}; do touch /mnt/c/Users/Username/test$i; done文件权限问题
常见问题
1. 文件权限显示为 777
原因:Windows 文件系统不支持 Linux 文件权限
解决方案:
- 在
/etc/wsl.conf中配置挂载选项 - 使用
metadata选项启用元数据支持
[automount]
options = "metadata,umask=22,fmask=11"2. 无法执行脚本
原因:文件没有执行权限
解决方案:
# 添加执行权限
chmod +x script.sh
# 或使用 bash 直接执行
bash script.sh3. 文件所有者问题
原因:在 Windows 中创建的文件所有者可能不正确
解决方案:
# 修改文件所有者
sudo chown username:username file.txt
# 递归修改目录
sudo chown -R username:username directory权限映射
WSL 尝试将 Windows 文件权限映射到 Linux 权限:
- Windows 只读 → Linux
444或555 - Windows 读写 → Linux
666或777 - Windows 执行 → Linux
755或777
处理 Windows 文件权限
# 查看文件权限
ls -l /mnt/c/Users/Username/file.txt
# 修改权限(可能不生效,取决于文件系统)
chmod 644 /mnt/c/Users/Username/file.txt
# 最佳实践:复制到 Linux 文件系统
cp /mnt/c/Users/Username/file.txt ~/file.txt
chmod 644 ~/file.txt特殊文件系统操作
符号链接
在 Linux 中创建符号链接
# 创建符号链接
ln -s /mnt/c/Users/Username/Documents ~/Documents
# 创建绝对路径符号链接
ln -s /mnt/c/Users/Username/Projects ~/projects
# 查看符号链接
ls -l ~/DocumentsWindows 符号链接支持
WSL 2 支持 Windows 符号链接,但需要注意:
- Windows 符号链接在 Linux 中可能显示为普通文件
- Linux 符号链接在 Windows 中可能无法正确解析
硬链接
# 创建硬链接(仅在同一文件系统内)
ln /mnt/c/file.txt /mnt/c/file_link.txt
# 硬链接不能跨文件系统
# 以下命令会失败:
ln /mnt/c/file.txt ~/file_link.txt # 错误文件锁定
# Linux 文件系统支持完整的文件锁定
# Windows 文件系统锁定支持有限
# 检查文件是否被锁定
lsof /path/to/file备份与恢复
备份 Linux 文件系统
# 在 PowerShell 中导出发行版
wsl --export Ubuntu-22.04 D:\Backup\ubuntu-22.04-backup.tar备份特定目录
# 在 WSL 中
tar -czf ~/backup.tar.gz /home/username/projects
# 复制到 Windows
cp ~/backup.tar.gz /mnt/c/Users/Username/Desktop/恢复文件
# 解压备份
tar -xzf backup.tar.gz -C /home/username/
# 从 Windows 复制文件
cp /mnt/c/Users/Username/backup/file.txt ~/file.txt