乐趣区

关于wsl2:WSL文档-不断补充中

全栈技术分享,API 文档动静更新,技术点扼要易懂,疾速入门
有帮忙的话点个赞吧,感兴趣的关注加书签取得更多文档,不便随时查阅,有问题欢送留言探讨

概念

基于 window 零碎的 linux 子系统,也就是 window 中装了个 linux,相似虚拟机,但比虚拟机轻量

wsl 能够装置多个散发,也就是多个 linux 零碎
wsl:子系统,也就是管理工具,相当于 linux 镜像
Distro:散发,也就是各个子系统软件实例,相当于镜像实例

装置

环境 要求
零碎 windows 11 22H2 25217.1010 以上
驱动(可选) wslg 须要显卡硬件反对 GPU, 反对的话装置对应版本驱动即可
用于 WSL 的 AMD GPU 驱动程序
用于 WSL 的英特尔 GPU 驱动程序
用于 WSL 的 NVIDIA GPU 驱动程序
虚拟化配置 启用虚拟化监控程序平台和虚拟机平台
重启进入 bios 界面确认启用虚拟化性能
软件包 1. wt: windows terminal(设置为默认程序)
2. wsl: window for linux preview 0.69 以上
3. linux:Ubuntu-22.04.1 LTS
阐明
软件包可在微软商店下载

win11 + wsl 0.69 以上 反对 systemd 和 wslg 界面

虚拟化配置门路:设置 - 利用 - 可选性能 - 更多 window 性能

能够依照官网文档阐明装置,我是间接下载 linux 后间接关上就主动装置了

随界面提醒装置好,第一次要批改明码:sudo passwd

官网装置文档

命令阐明

常用命令
wsl --version

WSL 版本:0.67.6.0
内核版本:5.15.62.1
WSLg 版本:1.0.44
MSRDC 版本:1.2.3401
Direct3D 版本:1.606.4
DXCore 版本:10.0.25131.1002-220531-1700.rs-onecore-base2-hyp
Windows 版本:10.0.25206.1000

wsl -l -v
wsl --set-default-version 2
wsl --shutdown

wsl --export Ubuntu-22.04 D:\software\system\Ubuntu-22.04-1013.tar
wsl --import Ubuntu-22.04-1013 D:\software\system\Ubuntu-22.04-1013 D:\software\system\Ubuntu-22.04-1013.tar
<font size=”5″>wsl</font>
作用 管理子系统
格局 wsl [ARG] [option]… COMMAND
示例 wsl -l -v
ARG –exec, -e <COMMAND> 不应用默认 shell 执行指定命令
按原样传递其余命令行
option –cd <DIRECTORY> 指定当前目录
-d|–distribution <Distro> 运行指定子系统散发
-u|–user 指定用户
wsl 的参数 –list –online 查看能装置的散发
–install [-d <Distro>] 装置指定散发,无指定即是默认散发
–set-default-version <version> 指定 wsl 版本, 个别设为 2
–shutdown 进行所有运行的散发
–update 更新 wsl 内核版本
–status 查看 wsl 状态
–rollback 还原到 wsl 内核先前版本
Distro 的参数 –export <Distro> <FILE> 导出散发到指定 tar 文件
–import <Distro> < 装置门路 > < 导入门路 > [options] 导入散发到指定装置门路
option: –version 2 指定 wsl 版本
–list|-l [options] <version> 列出散发信息
options
–all 所有
–running 运行中
-q 只显示名称
-v 详细信息
-o 显示可装置的散发列表
–set-edfault|-s <Distro> 设置默认进入的散发
–set-version <Distro> <version> 指定散发的 wsl 版本
–terminate|-t <Distro> 终止散发
–unregister 登记散发并删除根文件系统

wslg

概念

wsl 的图形工具,也就是反对你在 window 上显示 linux 利用的界面

wsl2 0.69 以上版本 默认装置了 wslg(比较稳定的 wslg)

体验

apt install gedit

gedit ~/.bachrc

网络配置固定 IP

1. 敞开 network 主动生成

vim /etc/wsl.conf

[network]
generateResolvConf = false

2. 批改 DNS 地址

vim /etc/resolv.conf

nameserver 8.8.8.8
重启后生效能够退出下面的.bashrc 里

vim ~/.bashrc

echo "nameserver 192.168.60.1" > /etc/resolv.conf

3. 固定 IP 脚本

留神替换为你的散发名

应用形式:每次 wsl shutdown 都双击脚本进入
@echo on
CHCP 65001

:: 开始获取管理员权限
setlocal
set uac=~uac_permission_tmp_%random%
md "%SystemRoot%\system32\%uac%" 2>nul
if %errorlevel%==0 (rd "%SystemRoot%\system32\%uac%" >nul 2>nul) else (echo set uac = CreateObject^("Shell.Application"^)>"%temp%\%uac%.vbs"
    echo uac.ShellExecute "%~s0","","","runas",1 >>"%temp%\%uac%.vbs"
    echo WScript.Quit >>"%temp%\%uac%.vbs"
    "%temp%\%uac%.vbs" /f
    del /f /q "%temp%\%uac%.vbs" & exit )
endlocal
:: 实现获取, 上面能够开始写你本人的代码了
echo 以后运行目录:%cd%\
echo 批处理所在目录:%~dp0
echo 切换回批处理所在目录:cd /d %%~dp0

REM 先敞开虚构子系统
wsl --shutdown
REM 把这里了解为一个开机启动脚本就行
wsl -d【你的散发名】-u root ip addr del $(ip addr show eth0 ^| grep 'inet\b' ^| awk '{print $2}' ^| head -n 1) dev eth0
wsl -d【你的散发名】-u root ip addr add 192.168.60.2/24 broadcast 192.168.60.255 dev eth0
wsl -d【你的散发名】-u root ip route add 0.0.0.0/0 via 192.168.60.1 dev eth0

powershell -c "Get-NetAdapter -IncludeHidden -Name'vEthernet (WSL)'| Get-NetIPAddress | Remove-NetIPAddress -Confirm:$False; New-NetIPAddress -IPAddress 192.168.60.1 -PrefixLength 24 -InterfaceAlias'vEthernet (WSL)'; Get-NetNat | ? Name -Eq WSLNat | Remove-NetNat -Confirm:$False; New-NetNat -Name WSLNat -InternalIPInterfaceAddressPrefix 192.168.60.0/24;"

REM 启动对应 Linux 零碎,我这里是应用 windows terminal
wt -p Ubuntu-22.04

exit

4. 测试

ip route 

default via 192.168.60.1 dev eth0
192.168.60.0/24 dev eth0 proto kernel scope link src 192.168.60.2

网关:192.168.60.1
子网掩码:192.168.60.0/24
ip 地址:192.168.60.2

ping lu.com

5. 扩大

网上还有一种形式是制作 exe 执行文件,放入 windows 的 service 服务就可实现开机主动执行,无需手动点击脚本,但我没有尝试胜利,附上文档和链接
要害 API:HcnCreateNetwork
HcnCreateEndpoint

exe 形式教程
官网 API

应用 window 的代理软件(v2ray)

1. 敞开 network 主动生成

vim /etc/wsl.conf

[network]
generateResolvConf = false

2. 批改 DNS 地址

vim /etc/resolv.conf

nameserver 8.8.8.8
重启后生效能够退出下面的.bashrc 里

vim ~/.bashrc

echo "nameserver 8.8.8.8" > /etc/resolv.conf

3. 配置端口转发

vim ~/.bashrc

# add for proxy, 端口看 v2ray 客户端最上面 局域网:[sock...]
export hostip=$(ip route | grep default | awk '{print $3}')
export hostport=10808
alias proxy='export HTTPS_PROXY="socks5://${hostip}:${hostport}";
    export HTTP_PROXY="socks5://${hostip}:${hostport}";
    export ALL_PROXY="socks5://${hostip}:${hostport}";
    echo -e "Acquire::http::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
    echo -e "Acquire::https::Proxy \"http://${hostip}:${hostport}\";" | sudo tee -a /etc/apt/apt.conf.d/proxy.conf > /dev/null;
'alias unproxy='
    unset HTTPS_PROXY;
    unset HTTP_PROXY;
    unset ALL_PROXY;
    sudo sed -i -e '/Acquire::http::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
    sudo sed -i -e '/Acquire::https::Proxy/d' /etc/apt/apt.conf.d/proxy.conf;
'

4. 测试

ping www.google.com
退出移动版