WSL

来自Wikioe
Eijux讨论 | 贡献2021年11月24日 (三) 00:04的版本 (Eijux移动页面WSL(Windows Subsystem for Linux)WSL,不留重定向)
(差异) ←上一版本 | 最后版本 (差异) | 下一版本→ (差异)
跳到导航 跳到搜索


概述

Windows Subsystem for Linux,即windows下的Linux子系统,可在Windows 10和Windows Server 2019上原生运行Linux二进制可执行文件。
WSL提供了一个由微软开发的Linux兼容的内核接口(不包含Linux内核代码),然后可以在其上运行GNU用户空间,例如Ubuntu、openSUSE、SUSE Linux Enterprise Server、Debian和Kali Linux。这样的用户空间可能包含Bash shell和命令语言,使用本机GNU/Linux命令行工具(sed,awk等),编程语言解释器(Ruby,Python等),甚至是图形应用程序(使用主机端的X窗口系统)。

文件系统

Windows Subsystem for Linuxt提供与真实Linux内核类似的虚拟文件系统(VolFsDriveFs),需要满足了两个目标:

  1. 提供一个完全支持Linux文件系统的环境
  2. 能够与Windows上的设备和文件互通

VolFs

VolFs提供了完整的Linux文件系统特性的支持,包括:

  1. Linux权限管理,访问权限可以通过如chmod和chroot来改变
  2. 文件的符号链接
  3. 文件名可以包含一些Windows上不合法的符号
  4. 大小写敏感
  • 包含Linux系统的目录,应用程序文件(/etc, /bin, /usr等)和/root/home目录都使用的是VolFs。
  • 与Windows应用和文件的互用在VolFs里并不支持。

DriveFs

DriveFs是为了和windows互用的文件系统。它需要所有的文件名是合法的windows文件名,使用Windows安全策略,并不完整地支持所有的Linux文件系统特性。文件名是大小写敏感的,用户不允许创建仅仅是大小写不同的两个文件。
所有的Windows磁盘使用DriveFs被挂在到/mnt//mnt/d等等下面。用户从这里可以访问所有Window下的文件。这允许用户用他们喜欢的Windows编辑器比如Visual StudioCode来编辑文件的同时,通过Bash里的一些开源工具来修改文件。

启用WSL

可以通过以下任一方式启用WSL:

  • “程序和功能”->“启用或关闭Windows功能”选中“适用于Linux的Windows子系统”,点击确定并重启系统。
  • 管理员权限打开 powershell,执行
    Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

安装Linux

打开MicrosoftStore,搜索可用的Linux发行版本(Debian、Ubuntu、SUSE、openSUSE等),点击获取安装即可。

安装自定义Linux

某些需要的Linux发行版不在MicrosoftStore中,需要通过power shell安装。

下载Centos7的docker镜像

(可以参考WSL-Distribution-Switcher下载)。

  1. 访问 CentOS 的官方 Docker 镜像网站:CentOS Cloud SIG image repository.
  2. 切换到自己想要的分支,比如:CentOS-7.8.2003-x86_64
  3. 进入 docker 目录,下载centos-*-docker.tar.xz文件,比如:CentOS-7.8.2003-x86_64-docker.tar.xz

安装chocolatey

(参考Installing Chocolatey) 使用管理员权限打开 powershell,执行:

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

安装LxRunOffline

执行:

choco install lxrunoffline

部署Centos到WSL

执行:

LxRunOffline.exe install -n centos7 -d D:\Documents\WindowsSubsystemLinux\centos7 -f E:\0.Server\temp\centos\centos-7.8.2003-x86_64-docker.tar.xz

其中-d后面是要安装到的目录,-f是前面下载的镜像,-n用来指定名称。

启动Centos

执行:

LxRunOffline run -n centos

或者:

wsl -d centos

或者(只安装了这一个WSL):

bash

注意

  1. 错误:LxRunOffline.exe : 无法将“LxRunOffline.exe”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
    解决:cd C:\tools\lxrunoffline,再执行LxRunOffline命令。
  2. 错误:Suggestion [3,General]: 找不到命令 LxRunOffline.exe,但它确实存在于当前位置。默认情况下,Windows PowerShell 不会从当前位置加载命令。如果信任此命令,请改为键入“.\LxRunOffline.exe”。有关详细信息,请参阅 "get-help about_Command_Precedence"。
    解决:在LxRunOffline路径下,用.\LxRunOffline.exe替换LxRunOffline.exe命令。