默认是安装在C盘,但这样不好,C盘很快就会满,可以export备份导出一份子系统然后再将其import恢复在指定位置达到换盘的目的,或者也可以直接从网络下载WSL对应子系统发行版的安装包将其解压到指定位置达到换盘的目的,在后面的笔记中有具体的方法
以管理员身份打开cmd命令行或者PowerShell(因为--web-download指令需要管理员权限才能使用),WSL相关的命令以wsl或者wsl.exe开头,我暂时不太清楚具体的差别,下面的笔记中使用到的指令如果行不通,那就把两者互换试试小贴士:以管理员方式打开PowerShell的快捷键Win+X, A设置WSL默认版本设置为WSL2 1wsl --set-default-version 2在安装前请先执行以下命令,--web-download使得我们从GitHub而不是Microsoft Store下载最新更新,该操作需要管理员权限 1wsl --update --web-download更新完后,可以选择直接安装,会默认安装Ubuntu发行版 1wsl --install如果wsl --install出现了以下报错,可以通过修改IPv4的DNS为114.114.114.114的方式暂时解决,具体操作详见此笔记末尾,实测对于本人此时使用的电脑有效 1无法解析服务器的名称或地址还可能会出现下图显示的这个报错解决方案:打开或创建WSL配置文件C:/User/username/.wslconfig并添加以下内容,然后打开命令行并执行wsl --shutdown命令关闭WSL,然后重启WSL即可解决这个问题 123456[experimental]autoMemoryReclaim=gradual networkingMode=mirroreddnsTunneling=truefirewall=trueautoProxy=true使用以下命令可以查询可安装的发行版,如果不想使用命令行安装的话可以参考后面关于从网络上下载发行版的笔记 1wsl --list --online使用如下命令可以安装指定的Linux发行版,xxxxxx代指发行版的名称,可以在指令末尾加上--web-download用以减少因网络问题导致安装失败的情况 1wsl --install -d xxxxxx每个子系统安装成功后都会要求你设置用户名和密码,如下图所示(用户名要合法),注意了!任何Linux系统的密码输入都是不会显示出来的,不是WSL的问题,也不是你电脑的问题!2.3 发行版环境的管理及其使用安装好后可以通过以下两指令之一查看安装过的Linux发行版列表,名字前带*的是当前的默认发行版,可以注意到每个发行版的名称后有一个STATE表示其状态,Stopped显然表示当前未在运行 12wsl -l -vwsl --list -v可以通过以下指令切换不同的默认发行版 1wsl --set-default xxxxxx在cmd或者PowerShell命令行中,可以通过以下命令来打开某Linux发行版的窗口,对应发行版的STATE即变成Running,想要关闭则输入指令exit即可退出,对应系统恢复Stopped状态(不是立刻,得等一会才行) 1wsl -d xxxxxx也可以输入以下指令关闭对应的子系统 1wsl --shutdown xxxxxx可以使用如下图的UI界面的按钮(只有以非管理员权限打开cmd或者PowerShell才会有如图所示的UI,管理员权限的话打开是没有这个按钮的)进入对应Linux发行版的命令行窗口,将窗口关闭则恢复Stopped状态如果unregister了某个发行版后上面所示的UI界面还会有这些图标的残留,并且点击的话还会进入并提示正在安装,解决方法是进入如上图所示的UI界面的设置选项,里面拉到最下面可以看到对应的Linux发行版的图标,点进去删除然后保存即可除去这玩意儿2.4 从网络获取发行版微软提供了一个手动下载WSL发行版的网址
选择想要的发行版下载后,可以得到一个后缀名为.appx的文件,把它的后缀改为.zip,然后解压到想要安装WSL的目录下解压后文件夹得到一个.exe文件,双击运行需要注意的是:安装目录的磁盘不能开压缩内容以便节省磁盘空间选项,否则会报错,可以右键文件夹–>属性–>常规–>高级找到并关闭这个选项安装成功后 文件夹下多一个.vhdx镜像,即为安装的位置,Linux产生的文件默认在刚刚自定义选择的路径下(如果是WSL1的话,其安装位置下的rootfs文件夹用于子系统里的全部文件,WSL2的话都是存放于.vhdx文件内)2.5 卸载指定的Linux发行版在Windows命令行中使用如下指令可以卸载某Linux子系统 1wsl --unregister xxxxxx2.6 备份与恢复使用如下指令可以对某Linux子系统进行备份,xxx.tar代表导出备份到我们Windows中的压缩包的名称,这个文件会被导出存放到你输入这个命令时命令行所在的路径位置,如平常我们直接打开命令行的位置C:/User/username/ 1wsl --export xxxxxx xxx.tar使用如下命令可以将压缩包所备份的Linux子系统导入Windows某盘下的某路径处,其中your_sys_name表示你为这个系统起的名字,后面两个路径第一个表示用于存放该系统的位置,第二个是你要导入的系统压缩包的路径 1wsl --import your_sys_name X:/aim_dir Y:/tar_dir/xxx.tar导入成功后你会发现目标路径下显示的是一个.vhdx后缀的HyperV的镜像文件,关于导入的Linux子系统的一切文件皆在此处三、文件共享3.1 在Linux查看Windows的文件在一个Ubuntu系统内使用以下指令,可以显示该系统所有挂载卷 1df -h结果如图所示,可以看到我们的Windows的三个盘直接作为目录被挂载在了此处这种使用挂载卷进行文件互通的方式的IO性能较弱,如果需要涉及较大量的IO操作的话,最好直接将需要用到的内容拷贝到Linux子系统内3.2 在Windows查看Linux的文件我们安装好任意一个Linux子系统后会发现我们的资源管理器多出了一个目录,如下图所示是其中一个子系统,其文件都在此处展示了出来3.3 命令混用不建议依赖于这样的混用,容易形成不好的习惯,但在特殊的场景下可以使得问题的解决更方便
WSL让我们可以在Linux系统命令行里使用某些Windows命令行的指令,比如通过以下命令调出记事本来打开Linux目录下的xxx.txt文件 1notepad.exe xxx.txt也可以在Linux中调出文件资源管理器,如下面的指令(后面的.表示当前目录)就可以以文件资源管理器的方式调出当前Linux路径 1explorer.exe .我们也可以在Windows中使用部分Linux指令,比如在PowerShell中(cmd无此指令)使用下列指令可以显示当前目录的所有文件 1Get-ChildItem如果我想对这些文件进行过滤筛选但不知道如何在Windows上写,但是我直到在Linux可以用grep过滤,我也可以在WSL的帮助下混用此指令,管道操作符|后跟着的是Linux的指令 1Get-ChildItem | wsp grep ".gitignore" . -r -n四、DNS修改此处基于Windows11系统操作
按Win + I快捷键打开设置,在左侧菜单栏找到“网络和Internet”点击高级网络设置,选中当前使用的网络此时一种方式是我们可以点击”查看其它属性”下方的”