> 所需环境: windows11专业版及以上 > WSL版本: 2 > 镜像: 通过VM导出或Docker导出 ## 获取镜像 ### 使用VM 1. 安装好镜像 2. 制作镜像 ```bash cd / tar Jcvpf debian.tar --exclude=/debian.tar --exclude=/proc --exclude=/sys / ``` ### 使用Docker 直接备份Docker容器 ## 导入到WSL ```bash # 导入 wsl --import Debian_base d:\WSL\Debian_base C:\Users\x7129\debian.tar # 导出 wsl --export Debian_base D:\Debian_Base_WSL.tar # 强制关闭 wsl --shutdown # 查看运行状态 wsl -l --all -v # 注销 wsl --unregister # 进入用户主页 wsl ~ # 进入身份 wsl -u root # 更感默认账户,导入版不行 # config --default-user # 关闭运行 wsl --terminate # 设置默认分发版 wsl -s Debian_base ``` ## 设置开机启动 win+r 输入shell:startup 创建文件: `wsl_init.vbs` ```powershell Set ws = WScript.CreateObject("WScript.Shell") ws.run "wsl -d Debian_base -u root /etc/wsl.init restart",vbhide ws.run "Set-VMSwitch WSL -NetAdapterName 以太网",vbhide ``` wsl 的其他参数 cmd="wsl -d Ubuntu-20.04 -u root --cd %USERPROFILE%" CreateObject("Wscript.Shell").run cmd,vbhide 除此之外还可以为 wsl设置一些参数,用于指定 wsl 的运行状态: --cd %USERPROFILE%用于指定wsl 的工作目录 -u root 用于指定 wsl的登录用户为 root -d Ubuntu-20.04 用于指定 wsl 的发行版,可以使用 wsl -l -v查看当前发行版 ## 设置桥接网络 win+r shell:startup 创建文件: `wsl_switch.vbs` ```powershell # 存在中文编码方式为ASCII strCommand ="C:\\WINDOWS\\system32\\WindowsPowerShell\\v1.0\\powershell.exe -command Set-VMSwitch WSL -NetAdapterName 以太网" Set WshShell = WScript.CreateObject("WScript.Shell") If WScript.Arguments.Length = 0 Then Set ObjShell = CreateObject("Shell.Application") ObjShell.ShellExecute "wscript.exe" _ , """" & WScript.ScriptFullName & """ RunAsAdministrator", , "runas", 1 WScript.Quit End if Set objExec = WshShell.Exec(strCommand) ``` ## 编辑wsl内部wsl.init文件 ```bash export PATH=/usr/sbin/:$PATH service ssh start # 后续启动内容可以添加 ``` ## 更改命令行提示颜色 cp /home/nie/.bashrc /root - 将ps1哪一行32改成31 root为红色 ## 设置网络 ```powershell # 管理员身份运行 Get-NetAdapter # 可能需要开启运行脚本的指令 Set-VMSwitch WSL -NetAdapterName 以太网 #以太网可以根据情况换,观察上面列出的网卡名称 ``` ## wsl内部 ```bash nano /etc/network.sh #!/bin/bash new_ip=192.168.1.233 brd=192.168.1.255 gateway=192.168.1.1 nameserver=192.168.1.1 net_dev=eth0 # 注意,下面这里需要用到wsl的sud执行命令,所以需要填写你wsl的密码 echo "[your password]" | sudo -S ip addr del $(ip addr show $net_dev | grep 'inet\b' | awk '{print $2}' | head -n 1) de>sudo ip addr add $new_ip/24 broadcast $brd dev $net_dev sudo ip route add 0.0.0.0/0 via $gateway dev $net_dev sudo sed -i "\$c nameserver $nameserver" /etc/resolv.conf ``` ```bash # /etc/wsl.init加入 /etc/wsl_network.sh ``` ## 其他设置 ```bash # nano /etc/wsl.conf [user] default=nie # 默认登陆账户 [network] hostname = wow-xi generateHosts = false # 不自动修改主机名 generateResolvConf = false # 不自动修改DNS ``` ```bash # nano /etc/hosts # 加入上面设置的主机名 127.0.0.1 wow-xi 127.0.0.1 localhost ```