Windows Subsystem for Linux
WSL
简称WSL,是一个在Windows 10\11上能够运行原生Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,其目标是使纯正的Ubuntu、Debian等映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。如果使用Windows10 2004以上,可以通过WSL2来窗口化运行桌面应用,也不需要另外安装其他的X服务器。该子系统不能运行所有Linux软件,但学习大多数内部命令的使用绝对方便!
WSL1 和 WSL2 的区别
说明
WSL1 和 WSL2 都可以实现在 windows 中带来 linux 操作体验;
启动速度都不慢;内存消耗都比较小;
WSL 1 没有使用的 VM,WSL 2 使用了一个自动维护的 VM;
WSL 1 不支持,WSL2 支持可以运行例如 Docker 等程序;
WSL 2 支持完整的 linux 内核调用,而 WSL 1 不行;
由于 WSL 2 使用了 Hyper-V,由于兼容性原不用同时运行 WSL 2 与 VMWare或VirtualBox,WSL 1 不存在此问题;
WSL 2 不能与 windows 跨操作系统文件操作(Windows 访问 WSL2 的方法为进行 WSL2 环境键入 “cd ~” 进入主目录后,再键入"explorer.exe ."可在windows 文件管理器中访问 WSL 2 文件,此外还可以通过虚拟机的方法互通文件,如网络,文件共享等),而 WSL 1 则与 windows 在同一文件系统中。
选择
如果你看中 WSL 与 windows 文件互通和互操作性,还是 WSL 1 更适合;
如果你常在 VM 里开发,工作环境基本都在 Linux 中,那么 WSL 2 会带来更加完美的体验;
如果你需要内核功能,那只能是 WSL 2 了。
准备工作
检查Window10\11版本,内部版本号低于 18362 的版本不支持 WSL。运行 winver 的结果:
或者在 Windows 命令提示符下输入 ver 命令:
C:\Users\hann>ver
Microsoft Windows [版本 10.0.23511.1000]
检查一下Windows Terminal是否为“已初装”状态:
打开Terminal,并按快捷键 Ctrl , (Ctrl键和逗号)调出启动设置界面
照下图所示设置,保存退出:
安装Linux子系统
打开MicrosoftStore,搜索Linux,然后安装自己喜欢的发行版,我安装了Ubuntu和Debian。
如还无法正常安装,可以试试以下步骤:
打开子系统功能
以管理员身份启动PowerShell,输入如下内容,以启用Windows子系统功能:
dism.exe/online/enable-feature/featurename:Microsoft-Windows-Subsystem-Linux/all/norestart
然后输入如下内容,以启用虚拟机平台功能:
dism.exe/online/enable-feature/featurename:VirtualMachinePlatform/all/norestart
完成之后,重启计算机。
下载Linux内核更新包
点击此链接,以下载适用于x64计算机的WSL2Linux内核更新包。
下载完成后,安装。
然后以管理员身份运行PowerShell,输入如下内容,以设置WSL2为默认版本:
wsl--set-default-version2
设置Unix用户名和密码
安装成功后,进入设置用户:
查看帮助 help
Ubantu的帮助: hann@HannYang:~$ help GNU bash, version 5.0.17(1)-release (x86_64-pc-linux-gnu) These shell commands are defined internally. Type `help' to see this list. Type `help name' to find out more about the function `name'. Use `info bash' to find out more about the shell in general. Use `man -k' or `info' to find out more about commands not in this list. Debian的帮助: hann@HannYang:~$ help GNU bash, version 5.2.15(1)-release (x86_64-pc-linux-gnu) These shell commands are defined internally. Type `help' to see this list. Type `help name' to find out more about the function `name'. Use `info bash' to find out more about the shell in general. Use `man -k' or `info' to find out more about commands not in this list. 两者列出的内部命令列表基本相同: job_spec [&] history [-c] [-d offset] [n] or history -an> (( expression )) if COMMANDS; then COMMANDS; [ elif COMMANDS> . filename [arguments] jobs [-lnprs] [jobspec ...] or jobs -x comm> : kill [-s sigspec | -n signum | -sigspec] pi> [ arg... ] let arg [arg ...] [[ expression ]] local [option] name[=value] ... alias [-p] [name[=value] ... ] logout [n] bg [job_spec ...] mapfile [-d delim] [-n count] [-O origin] [> bind [-lpsvPSVX] [-m keymap] [-f filename] [> popd [-n] [+N | -N] break [n] printf [-v var] format [arguments] builtin [shell-builtin [arg ...]] pushd [-n] [+N | -N | dir] caller [expr] pwd [-LP] case WORD in [PATTERN [| PATTERN]...) COMMAN> read [-ers] [-a array] [-d delim] [-i text]> cd [-L|[-P [-e]] [-@]] [dir] readarray [-d delim] [-n count] [-O origin]> command [-pVv] command [arg ...] readonly [-aAf] [name[=value] ...] or reado> compgen [-abcdefgjksuv] [-o option] [-A acti> return [n] complete [-abcdefgjksuv] [-pr] [-DEI] [-o op> select NAME [in WORDS ... ;] do COMMANDS; d> compopt [-o|+o option] [-DEI] [name ...] set [-abefhkmnptuvxBCHP] [-o option-name] [> continue [n] shift [n] coproc [NAME] command [redirections] shopt [-pqsu] [-o] [optname ...] declare [-aAfFgilnrtux] [-p] [name[=value] .> source filename [arguments] dirs [-clpv] [+N] [-N] suspend [-f] disown [-h] [-ar] [jobspec ... | pid ...] test [expr] echo [-neE] [arg ...] time [-p] pipeline enable [-a] [-dnps] [-f filename] [name ...> times eval [arg ...] trap [-lp] [[arg] signal_spec ...] exec [-cl] [-a name] [command [arguments ...> true exit [n] type [-afptP] name [name ...] export [-fn] [name[=value] ...] or export -> typeset [-aAfFgilnrtux] [-p] name[=value] .> false ulimit [-SHabcdefiklmnpqrstuvxPT] [limit] fc [-e ename] [-lnr] [first] [last] or fc -s> umask [-p] [-S] [mode] fg [job_spec] unalias [-a] name [name ...] for NAME [in WORDS ... ] ; do COMMANDS; don> unset [-f] [-v] [-n] [name ...] for (( exp1; exp2; exp3 )); do COMMANDS; don> until COMMANDS; do COMMANDS; done function name { COMMANDS ; } or name () { CO> variables - Names and meanings of some shel> getopts optstring name [arg] wait [-fn] [id ...] hash [-lr] [-p pathname] [-dt] [name ...] while COMMANDS; do COMMANDS; done help [-dms] [pattern ...] { COMMANDS ; }
日常使用
打开后的样子:
键几个linux命令试试:
到此,安装结果就能正常使用了。