win 11如何使用Ubuntu
知道win系统Microsoft Store
里有Ubuntu
应用,一直没有尝试来用,以为像其它软件一样安装即用呢,结果下载下来一顿报错,网上各种所谓的解决方案都试过,还是不行,最后还是胖哥靠谱,这里仅作为记录啊。
作为一个程序员在开发中会经常使用Linux环境进行开发,但并不是每个程序员都能拥有一台自己的苹果笔记本电脑的。毕竟苹果的价格还是比Windows电脑贵很多的。
其实在的Windows10
以上的系统是完全可以使用Linux开发环境的,这个救命稻草就是WSL2
。这个教程,我们就详细讲解一下Win11
下,如何使用WSL2- Windows Subsystem for Linux
。
BIOS中开启虚拟化
第一步是打开主板BIOS的虚拟化选项,如果你是这几年新买的电脑,默认这项是打开的。注意这一项每个电脑主板型号的不同,设置的方法也不同。所以最好的方法,是你根据自己主板的型号,去百度或者Google去搜索一下开启虚拟话的方法。
- Windows平台 :
Intel(VMX)Virtuallzation Technology
需要到主板中进行开启 AMD
平台:AMD-V
WSL
的两个版本和安装要求
WSL
:也就是我们常说WSL1
,第一个版本,对windows的版本要求较低WSL2
:第二个版本,要求WIN10
版本高于1903
至于两个版本的区别不是教程的重点,就不做过多的介绍了。
WSL2
安装过程
Microsoft英文版文档网址:https://docs.microsoft.com/en-us/windows/wsl/install-manual
- 第一步:启动
WSL
。用管理员身份打开PowerShell
.(打开方法见视频),然后在PowerShell
中,输入下面的命令。
1 | dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart |
- 第二步:启动虚拟机给功能。同样在
PoweShell
中输入下面的命令。输入完命令后,要重启一下电脑,然后再进行第三步。
1 | dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart |
- 第三步:下载Linux内核更新包。
下载地址:https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi
- 第四步:将
WSL2
设置为默认版本。打开PowerShell
,然后在安装新的 Linux 发行版时运行以下命令,将WSL 2
设置为默认版本,命令如下。
1 | wsl --set-default-version 2 |
第四步安装完成后,你就可以去安装对应的Linux发行版了,这里我们拿Ubuntu
举例。
安装Ubuntu
发行版
打开Microsoft Store
,并选择你偏好的Linux分发版。我这里选择Ubuntu
并进行安装。下载时间会根据网络不同,时间不同。我家的网络安装还是比较慢的。
安装完成后,就可以使用了。如果是首次进入,需要你设置用户名和密码。当进入系统后,可以使用下面的命令来查看当前Ubuntu
的版本。
1 | tony@DESKTOP-TPUK7BF:/$ lsb_release -a |
输入完命令后,就可以看到版本信息了。至此WSL2
的安装过程就演示完成了,希望本视频对你有所帮助。
以上内容来源:https://jspang.com/article/80
侵权请联系本人删除
同一局域网下windows主机和wsl子系统相互网络服务访问
从主机访问wsl的服务
本来就是宿主机访问,索性可以将wsl防火墙关掉或者开放指定端口。然后确认wsl的ip
1 | (py3) root@UYYNOT:/home/tony/test/MyDjango# ifconfig |
172.24.137.156就是wsl的ip,然后wsl上开启一个0.0.0.0:5001
的web服务,宿主机就可以直接使用172.24.137.156:5001
就访问该服务。
从wsl访问主机的服务
在主机上用管理员身份打开
powershell
输入命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24PS C:\WINDOWS\system32> New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow
>>
Name : {065dd160-e6e1-49ed-8ae1-cacd5ab1e84d}
DisplayName : WSL
Description :
DisplayGroup :
Group :
Enabled : True
Profile : Any
Platform : {}
Direction : Inbound
Action : Allow
EdgeTraversalPolicy : Block
LooseSourceMapping : False
LocalOnlyMapping : False
Owner :
PrimaryStatus : OK
Status : 已从存储区成功分析规则。 (65536)
EnforcementStatus : NotApplicable
PolicyStoreSource : PersistentStore
PolicyStoreSourceType : Local
RemoteDynamicKeywordAddresses : {}然后在wsl中输入命令:
1
2
3
4(py3) root@UYYNOT:/home/tony/test/MyDjango# cat /etc/resolv.conf | grep nameserver | awk '{ print $2 }'
172.24.128.1
8.8.8.8
114.114.114.114就会出现一个ip,这个ip可以用ping + ip测试一下,应该可以连通
1
2
3
4
5
6
7
8
9
10
11(py3) root@UYYNOT:/home/tony/test/MyDjango# ping 172.24.128.1
PING 172.24.128.1 (172.24.128.1) 56(84) bytes of data.
64 bytes from 172.24.128.1: icmp_seq=1 ttl=64 time=0.237 ms
64 bytes from 172.24.128.1: icmp_seq=2 ttl=64 time=0.356 ms
64 bytes from 172.24.128.1: icmp_seq=3 ttl=64 time=0.216 ms
64 bytes from 172.24.128.1: icmp_seq=4 ttl=64 time=0.243 ms
64 bytes from 172.24.128.1: icmp_seq=5 ttl=64 time=0.197 ms
^C
--- 172.24.128.1 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4148ms
rtt min/avg/max/mdev = 0.197/0.249/0.356/0.055 ms主机开启一个http服务,随便一个文件夹cmd执行
python -m http.server 8080
来启动一个服务。1
2D:\neatdownload>python -m http.server 8080
Serving HTTP on 0.0.0.0 port 8080 (http://0.0.0.0:8080/) ...wsl测试访问
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17(py3) root@UYYNOT:/home/tony/test/MyDjango# curl http://172.24.128.1:8080
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Directory listing for /</title>
</head>
<body>
<h1>Directory listing for /</h1>
<hr>
<ul>
<li><a href="20141118143101-0001%281%29.pdf">20141118143101-0001(1).pdf</a></li>
<li><a href="20141118143101-0001%282%29.pdf">20141118143101-0001(2).pdf</a></li>
<li><a href="20141118143101-0001.pdf">20141118143101-0001.pdf</a></li>
<li><a href="20201117183252-0001.pdf">20201117183252-0001.pdf</a></li>
<li><a href="20201117183308-0001.pdf">20201117183308-0001.pdf</a></li>
<li><a href="20201117183327-0001.pdf">20201117183327-0001.pdf</a></li>可以看到已经能访问到宿主机服务
通过远程ip连接wsl中的服务(局域网)
如果多台机器位于同一局域网下,访问的时候可以使用http://ip:port
的方式来访问,那如果我们的服务启动在wsl中,同一局域网下的其他机器该怎么访问呢
在wsl子系统中,使用以下命令,获取wsl的ip
1
2
3ip addr | grep eth0
或者
ifconfig可以看到wsl的ip为:172.24.137.156
在windows中,用管理员方式打开powershell,输入命令,这里我的wsl的ip为172.24.137.156,要启动服务的端口为5001,因此命令如下:
1
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=5001 connectaddress=172.24.137.156 connectport=5001
记得在使用的时候,替换connectaddress和listenport、connectport为你需要的值。
此时我的wsl已经启动了一个端口为5001的django服务了
然后在Windows的powershell中,输入ipconfig,找到
无线局域网适配器 WLAN:
的IPV4地址
,我这里为172.29.95.67,我们宿主机使用本地ip看能不能访问到wsl中的服务,图中可以看到,wsl端口已经成功映射到了本地,可以成功访问,局域网中其他ip如何访问呢?
在同一局域网下的另一台设备上,打开浏览器,输入http://172.29.95.67:2345
,试试,是不是也能成功访问了呢!!!总结下来是不是跟docker很像?
关于wsl更多的使用方式,可阅读官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/