WSL:Windows Subsystem for Linux,适用于 Linux 的 Windows 子系统
官方文档:WSL 文档 (opens new window)
摘自官方:适用于 Linux 的 Windows 子系统可让开发人员按原样运行 GNU/Linux 环境,包括大多数命令行工具、实用工具和应用程序,且不会产生传统虚拟机或双启动设置开销
比较 WSL1 与 WSL2:
WSL1 使用翻译层将 Linux 系统调用转化成 Windows 系统调用,是对 Linux 的模拟
WSL2 是真实的 Linux 内核,运行在一个轻量级的、无需维护的虚拟机上,这意味着我们在 WSL2 上几乎可获得完整 Linux 体验,如运行 docker 等
WSL 带来的优势:
丰富的命令行软件生态,便捷软件包管理,相比于虚拟机,具有轻量性、易维护性,并与 Winodws 有良好的集成,如文件互访、网络共享等
如 :WSL2 与 Winodws 交换文件的方式
从 Windows 访问 Linux 文件,可通路径 \\wsl$\<distroName>\
进行访问
从 Linux 访问 Windows 文件,可通过路径 /mnt/<diskSymbol>
进行访问
判断系统是否支持 WSL2:
若要更新到 WSL 2,需要运行 Windows 10
x64 系统需要 1903 或更高版本,内部版本为 18362 或更高版本
x64 系统需要 2004或更高版本,内部版本为 19041或更高版本
通过 Windows 徽标键 + R,然后键入winver
查看版本相关信息
安装步骤:
启用 WSL 与 虚拟机平台
在 Windows 控制面板中打开 Windows 功能的管理界面启用或关闭 Windows 功能
,勾选适用于 Linux 的 Windows 子系统
和虚拟机平台
,重启电脑
也可以使用以下命令来启用上述功能,执行完毕后重启电脑
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
下载 WSL2 Linux 内核更新包
下载适用于 x64 计算机的 WSL2 Linux 内核更新包 (opens new window),运行更新包安装程序
注:ARM64 计算机需要安装 ARM 版本
PowerShell 中执行以下命令,设置 WSL 默认版本为 WSL2
wsl --set-default-version 2
Microsoft Store 安装
打开微软商店,搜索 Linux
选择需要的发行版安装,安装完成后,第一次启动需要设置用户名和密码
至此,WSL2 发行版安装完成
安装包安装
安装包下载地址:https://docs.microsoft.com/zh-cn/windows/wsl/install-manual
下载完成后得到一个 <distro>.appx
格式的安装文件,可以直接双击安装
默认安装到 C 盘的用户目录 AppData\Local\Packages\
下,如下操作可以安装到其他盘符:
将.appx
文件改为.zip
格式,解压放置到 C 盘意外的安装目录,如图为安装 Ubuntu-20.04
执行ubuntu2004.exe
,按提示设置用户名和密码,其他发行版操作类似
ubuntu2004.exe
可用于配置子系统,如忘记了 root 密码,可执行ubuntu2004 config --default-user root
配置默认用户为 root,再打开子系统,使用passwd
命令重设密码
如果已经安装在 C 盘,想迁移 WSL 系统文件到其他盘,可以先将 WSL 系统导出、注销,再导入,导入时指定系统文件存放路径,最后设置默认用户
依次执行:
wsl --export Ubuntu-20.04 d:\Ubuntu20.04.tar wsl --unregister Ubuntu-20.04 wsl --import Ubuntu-20.04 d:\Ubuntu-20.04 d:\Ubuntu20.04.tar --version 2 ubuntu2004 config --default-user Username
安装 Java
直接使用包管理器安装,如 Ubuntu 下使用 apt 命令安装
sudo apt install openjdk-8-jdk
也可以使用安装包安装,可在清华大学开源软件镜像站 (opens new window)下载
使用 tar 命令解压安装到指定的目录下
如下载的包为 OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz
tar -zxvf ./OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz -C ./jdk
修改解压出的文件夹名称,如解压到了jdk8u292-b10
文件夹
mkdir ./jdk8
mv ./jdk8u292-b10/* ./jdk8
rm -rf ./jdk8u292-b10
安装 maven
访问官网下载安装包,Download Apache Maven (opens new window)
执行解压安装命令
tar -zxvf ./apache-maven-3.8.1-bin.tar.gz
修改文件夹名称
mkdir ./maven
mv ./apache-maven-3.8.1/* ./maven
rm -rf apache-maven-3.8.1
安装 Node.js
访问官网下载安装包,下载 | Node.js (opens new window)
执行解压安装命令
xz -d ./node-v14.17.4-linux-x64.tar.xz
tar -xvf ./node-v14.17.4-linux-x64.tar.xz
修改为合适的文件夹名称,如 node
配置环境变量
Winodws 默认将环境变量追加到 WSL 中,关闭方法如下
etc 目录下新建 wsl.conf 文件
sudo touch /etc/wsl.conf
使用 vim 命令打开,在其中添加配置
[interop]
appendWindowsPath = false
编辑用户目录下.profile
文件,将 bin 目录添加环境变量配置
export PATH=$PATH:~/jdk/jdk8/bin
export PATH=$PATH:~/maven/bin
export PATH=$PATH:~/node/bin
使用以下命令测试配置是否成功
java -version # 打印 java 版本
mvn -v # 打印 maven 版本
node -v # 打印 node 版本
npm -v # 打印 npm 版本
安装 zsh
sudo apt install zsh
设置 zsh 为默认 shell
chsh -s /bin/zsh
安装 onmyzsh,默认下载到 ~/.oh-my-zsh
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
安装插件
输入zsh
切换到 zsh 终端,拉取插件到 ~/.oh-my-zsh/custom/plugins
# 语法高亮插件
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
# 自动提示插件
git clone https://github.com/zsh-users/zsh-autosuggestions ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
配置 ~/.zshrc
vi ~/.zshrc
编辑内容如下
# 在 plugins 后括号里添加安装的插件名字
# git 是自带的显示 git 信息的插件,z 是自带的自动跳转路径的插件
plugins=( git
z
zsh-autosuggestions
zsh-syntax-highlighting
)
# 让 .profile 中的配置生效
source ~/.profile
保存编辑,执行source ~/zshrc
,使.zshrc
生效
Windows 上可以通过 localhost 访问 WSL 内的网络应用(需要较高的 Windows)版本
WSL 内想要使用 Windows 代理,可如下配置
测试 WSL 能否 ping 通 Windows 主机
如果不能,一般是因为 Windows 防火墙拦截,可在管理员命令行执行以下命令添加防火墙规则
New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
也可以手动添加规则,步骤如下
打开 Windows 防火墙高级设置
新建入站规则,选择自定义 => 所有程序
,其他设置默认,作用域设置界面如下
在远程 IP 处添加 WSL 的 IP 地址,子网掩码一般为 /20
获取 WIndows 主机 IP
Windows IP 保存在/etc/resolv.conf
中
cat /etc/resolv.conf|grep nameserver|awk '{print $2}'
设置代理工具为局域网可见,没有该设置的代理工具可以将监听地址设置为0.0.0.0
在.profile
中配置全局代理
export WIN_SOCKS_PORT=1089
export WIN_IP=`cat /etc/resolv.conf|grep nameserver|awk '{print $2}'`
export HTTP_PROXY=socks5://$WIN_IP:$WIN_SOCKS_PORT
export HTTPS_PROXY=socks5://$WIN_IP:$WIN_SOCKS_PORT
测试代理是否生效
curl cip.cc
配置 proxychains 命令行代理工具
安装 proxychains4
sudo apt install proxychains4
打开/etc/proxychains4.conf
,记下设置socks5
的那一行的行数,大多为第 115 行
# add proxy here ...
# meanwile
# defaults set to "tor"
socks5 172.21.112.1 1089
在.profile
中设置 proxychains 配置
export WIN_IP=`cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'`
export WIN_SOCKS_PORT=1089
# sed 命令将代理配置写入 proxychains4.conf 的第 115 行
sudo sed -i "157c socks5 $WIN_IP $WIN_SOCKS_PORT" /etc/proxychains4.conf
测试 proxychains
proxychains curl cip.cc