WSL 最佳实践
WSL 性能优化、安全建议和工作流建议
📋 目录
性能优化
1. 使用 WSL 2
推荐:始终使用 WSL 2 而不是 WSL 1
# 检查当前版本
wsl --list --verbose
# 转换为 WSL 2
wsl --set-version Ubuntu-22.04 2
# 设置默认版本
wsl --set-default-version 2优势:
- 完整的 Linux 内核
- 更好的文件系统性能
- 更好的 Docker 支持
- 更好的系统调用兼容性
2. 合理配置资源
.wslconfig 配置
[wsl2]
# 根据系统内存调整(建议 4-8GB)
memory=8GB
# 根据 CPU 核心数调整(建议 2-4 核)
processors=4
# 交换空间(建议为内存的 25-50%)
swap=2GB
# 交换文件位置
swapFile=C:\\Users\\YourUsername\\AppData\\Local\\Temp\\swap.vhdx
# 启用本地主机转发
localhostForwarding=true建议:
- 内存:系统总内存的 50%,但不超过 8GB
- CPU:系统核心数的 50-75%
- 交换空间:内存的 25-50%
3. 文件系统位置
推荐:Linux 文件系统
# 推荐:项目文件在 Linux 文件系统中
~/projects/myapp
/home/username/projects/myapp优势:
- 更好的文件系统性能(ext4)
- 完整的 Linux 文件权限支持
- 更好的符号链接支持
- 更快的文件操作
不推荐:Windows 文件系统
# 不推荐:项目文件在 Windows 文件系统中
/mnt/c/Users/Username/projects/myapp劣势:
- 较慢的文件系统性能(通过 9p 协议)
- 文件权限支持有限
- 符号链接支持有限
混合使用策略
# 使用符号链接连接 Windows 和 Linux 文件系统
ln -s /mnt/c/Users/Username/Documents ~/Documents
ln -s /mnt/c/Users/Username/Downloads ~/Downloads
# 项目文件放在 Linux 文件系统
~/projects/myapp4. 优化挂载选项
/etc/wsl.conf 配置
[automount]
enabled = true
root = /mnt/
options = "metadata,umask=22,fmask=11"
crossDistro = false选项说明:
metadata:启用文件元数据支持umask=22:目录权限 755fmask=11:文件权限 644
5. 定期清理
# 清理 apt 缓存
sudo apt clean
sudo apt autoremove
# 清理 Docker(如果使用)
docker system prune -a
# 清理日志
sudo journalctl --vacuum-time=7d
# 查找大文件
du -h --max-depth=1 ~ | sort -h6. 使用 SSD
建议:将 WSL 安装在 SSD 上以获得更好的性能
# 迁移 WSL 到其他驱动器
wsl --export Ubuntu-22.04 D:\WSL\backup.tar
wsl --unregister Ubuntu-22.04
wsl --import Ubuntu-22.04 D:\WSL\Ubuntu-22.04 D:\WSL\backup.tar安全建议
1. 用户权限
使用非 root 用户
# 创建专用用户
sudo adduser devuser
sudo usermod -aG sudo devuser
# 设置默认用户
sudo nano /etc/wsl.conf
# 添加:
[user]
default = devuser配置 sudo
# 编辑 sudoers
sudo visudo
# 限制 sudo 权限(而不是 NOPASSWD: ALL)
devuser ALL=(ALL) /usr/bin/apt, /usr/bin/apt-get2. 防火墙配置
Windows 防火墙
# 只允许必要的端口
New-NetFirewallRule -DisplayName "WSL Port 3000" `
-Direction Inbound `
-LocalPort 3000 `
-Protocol TCP `
-Action AllowLinux 防火墙(如果需要)
# 安装 ufw
sudo apt install ufw
# 配置规则
sudo ufw allow 22/tcp
sudo ufw enable3. SSH 配置
禁用密码认证
# 编辑 SSH 配置
sudo nano /etc/ssh/sshd_config
# 设置:
PasswordAuthentication no
PubkeyAuthentication yes使用密钥认证
# 生成 SSH 密钥
ssh-keygen -t ed25519 -C "your.email@example.com"
# 添加公钥到服务器
ssh-copy-id user@server4. 定期更新
# 更新系统
sudo apt update
sudo apt upgrade
# 更新 WSL
wsl --update5. 敏感信息管理
# 使用环境变量文件(不要提交到 Git)
echo '.env' >> .gitignore
# 使用密钥管理工具
# 例如:pass、gopass、1Password CLI工作流建议
1. 项目组织
推荐项目结构
~/projects/
├── frontend/
│ └── myapp/
├── backend/
│ └── api/
└── scripts/
└── utils/
使用版本控制
# 初始化 Git 仓库
cd ~/projects/myapp
git init
git remote add origin https://github.com/username/repo.git2. 开发工具配置
VS Code 集成
# 在 WSL 中打开项目
code ~/projects/myapp
# VS Code 会自动使用 WSL 中的:
# - Node.js、Python、Go 等运行时
# - Git
# - 终端
# - 扩展终端配置
# 使用 zsh 和 Oh My Zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# 配置 .zshrc
nano ~/.zshrc3. 环境管理
使用版本管理工具
# Node.js: nvm
nvm install 18
nvm use 18
# Python: pyenv
pyenv install 3.11.0
pyenv global 3.11.0
# Go: g
g install 1.21.0
g use 1.21.0使用虚拟环境
# Python 虚拟环境
python3 -m venv venv
source venv/bin/activate
# Node.js: 使用项目本地 node_modules
npm install4. 构建和部署
使用 Docker
# 开发环境
docker compose -f docker-compose.dev.yml up
# 生产环境
docker compose up -d使用 CI/CD
# .github/workflows/ci.yml
name: CI
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: npm test5. 文档和笔记
# 在项目中使用 Markdown
# README.md
# docs/
# - setup.md
# - api.md开发环境配置
1. 基础工具
# 安装基础工具
sudo apt install -y \
build-essential \
curl \
wget \
git \
vim \
nano \
tree \
htop \
jq \
unzip \
zip2. Shell 配置
.bashrc 或 .zshrc
# 常用别名
alias ll='ls -alF'
alias la='ls -A'
alias l='ls -CF'
alias ..='cd ..'
alias ...='cd ../..'
# 环境变量
export EDITOR='code --wait'
export PATH="$HOME/.local/bin:$PATH"3. Git 配置
# 全局配置
git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global core.editor "code --wait"
git config --global init.defaultBranch main
# SSH 密钥
ssh-keygen -t ed25519 -C "your.email@example.com"4. 开发工具
Node.js 开发
# 使用 nvm
nvm install --lts
nvm use --lts
# 全局工具
npm install -g yarn pnpm typescriptPython 开发
# 使用 pyenv
pyenv install 3.11.0
pyenv global 3.11.0
# 虚拟环境
python -m venv venv
source venv/bin/activate5. 数据库
# 使用 Docker 运行数据库
docker run -d \
--name postgres \
-e POSTGRES_PASSWORD=password \
-p 5432:5432 \
postgres:15
# 或使用本地安装
sudo apt install postgresql备份与恢复
1. 定期备份
导出发行版
# 定期导出(例如:每周)
wsl --export Ubuntu-22.04 D:\Backup\ubuntu-22.04-$(Get-Date -Format "yyyyMMdd").tar备份项目文件
# 使用 tar 压缩
tar -czf ~/backup/projects-$(date +%Y%m%d).tar.gz ~/projects
# 复制到 Windows
cp ~/backup/projects-*.tar.gz /mnt/c/Users/Username/Backup/2. 配置文件备份
# 备份配置文件
cp ~/.bashrc ~/.bashrc.backup
cp ~/.zshrc ~/.zshrc.backup
cp ~/.gitconfig ~/.gitconfig.backup
# 使用 Git 管理配置文件
git init ~/.dotfiles
cd ~/.dotfiles
git add .
git commit -m "Backup config files"3. 恢复策略
恢复发行版
# 从备份恢复
wsl --import Ubuntu-22.04-Restored D:\WSL\Ubuntu-22.04-Restored D:\Backup\ubuntu-22.04-backup.tar恢复项目文件
# 解压备份
tar -xzf backup/projects-20240101.tar.gz -C ~/4. 自动化备份
使用脚本
# backup-wsl.ps1
$date = Get-Date -Format "yyyyMMdd"
$backupPath = "D:\Backup\WSL"
# 导出发行版
wsl --export Ubuntu-22.04 "$backupPath\ubuntu-22.04-$date.tar"
# 清理旧备份(保留最近 7 天)
Get-ChildItem "$backupPath\*.tar" | Where-Object {
$_.LastWriteTime -lt (Get-Date).AddDays(-7)
} | Remove-Item使用任务计划程序
- 打开任务计划程序
- 创建基本任务
- 设置触发器(例如:每周日)
- 设置操作:运行
backup-wsl.ps1
性能监控
1. 资源监控
# 查看系统资源
htop
# 或
top
# 查看磁盘使用
df -h
du -h --max-depth=1 ~ | sort -h
# 查看内存使用
free -h2. 性能测试
# 文件系统性能测试
time for i in {1..1000}; do touch test$i; done
time for i in {1..1000}; do rm test$i; done3. 日志分析
# 查看系统日志
journalctl -xe
# 查看特定服务日志
journalctl -u service_name