前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Linux|WSL打造Windows下更顺畅的双系统之终篇

Linux|WSL打造Windows下更顺畅的双系统之终篇

作者头像
琉璃康康
发布2024-07-04 15:54:10
3840
发布2024-07-04 15:54:10
举报
文章被收录于专栏:七禾页话

所以我就定义了一个关键字 wsl 的自动回复,不过还是将二更的文章发给了朋友,又说了下设置开机自启动在一更的文章里。

自己说完之后都感觉很麻烦,所以就想着把两篇合称一篇做一个最终章。

WSL的全称是Windows Subsystem for Linux,是微软拥抱开源的里程碑式功能,从Windows10开始支持,从而使得在Windows系统的基础上可以运行类原生Linux系统,为什么想到了类原生这个概念呢?因为Linux的某些功能确实在WSL上无法实现,比如docker在WSL1上是不可用的。

虽然WSL有一些限制,但是对于日常学习、了解和使用还是非常方便的,那么如何在Windows10以及高版本使用WSL呢?大概分三步:

  1. 开启wsl功能;
  2. 安装一个发行版本;
  3. 初始化:初始化系统、安装其他的服务、开机自启动等。

1、开启WSL功能

默认情况下Windows没有开启WSL的功能,所以第一步就是要在控制面板——程序——启用或关闭Windows功能里开启WSL,开启后需要重启电脑才能生效:

@七禾页话

@七禾页话

@七禾页话

2、安装一个Linux发行版本

开启了WSL功能后,需要安装一个Linux系统,可以通过两种方式安装:

  1. 直接通过微软商店的GUI安装;
  2. 通过wsl命令安装。
2.1、通过微软商店GUI安装

打开微软商店,搜索Linux后就会看到诸多WSL下的Linux发行版本,比如安全类的Kali,日常用的Debian、Ubuntu、Suse等等。

@七禾页话

@七禾页话

@七禾页话

选择一个想使用的版本安装即可,比如我选择的是Ubuntu:

@七禾页话

2.2、通过wsl命令行安装

如果微软商店被限制下载非授权的软件或者其他原因等无法使用GUI安装,或者想做自动化开发,可以尝试使用 wsl 命令来安装管理Linux系统。

首先可以通过 wls --list --online 查看可以安装的Linux版本,这里可能会遇到“无法解析服务器名词或地址”的错误:

代码语言:javascript
复制
左右滑动
PS C:\> wsl --list --online
无法解析服务器的名称或地址
PS C:\>
PS C:\>

解决办法是规避魔法的DNS查询,直接将URL的解析放到C:\Windows\System32\drivers\etc\hosts里,这里推荐使用notepad--软件进行更新(懂的都懂!!!),更新内容如下:

代码语言:javascript
复制
##左右滑动
185.199.108.133   raw.githubusercontent.com

然后就可以通过 wsl --list --online查看可以安装的版本了:

代码语言:javascript
复制
左右滑动
PS C:\> wsl --list --online
以下是可安装的有效分发的列表。
请使用“wsl --install -d <分发>”安装。

NAME                   FRIENDLY NAME
Ubuntu                 Ubuntu
Debian                 Debian GNU/Linux
kali-linux             Kali Linux Rolling
Ubuntu-18.04           Ubuntu 18.04 LTS
Ubuntu-20.04           Ubuntu 20.04 LTS
Ubuntu-22.04           Ubuntu 22.04 LTS
Ubuntu-24.04           Ubuntu 24.04 LTS
openSUSE-Tumbleweed    openSUSE Tumbleweed
PS C:\>

之后通过 wsl --install -d <Linux发行版NAME> 安装,比如选择Ubuntu(安装的是最新的Ubuntu版本):

代码语言:javascript
复制
左右滑动
C:\Users\username>wsl --install -d ubuntu 
Downloading: Ubuntu 
Installing: Ubuntu 
Ubuntu has been installed. 
Launching Ubuntu... 

3、初始化Linux系统

不管是通过微软商店GUI后需要手打还是 wsl 命令安装都需要初始化Linux系统。

如果是通过微软商店GUI安装的,需要手动在开始菜单栏打开运行Linux系统(当然也可以直接搜索Linux的名字打开):

@七禾页话

打开后等一段时间初始化,就会提示添加一个新用户,此用户会默认带sudo功能(什么是sudo?不知道的可以留言),然后设置用户名密码即可,如果是通过 wsl 命令安装的,安装完成有可能会自动加载(Launch),跳出下图初始化界面了,如果没有,按照上述介绍手动加载(Launch):

@七禾页话

4、运行Linux子系统

有三种方法运行Linux系统。

一是搜索bash打开:

@七禾页话

二是通过Win下的命令行模式:打开cmd之后运行bash命令,就可以进入Linux系统。

@七禾页话

三是通过开始菜单栏打开安装的Linux系统或搜索Linux系统名,比如我使用的Ubuntu:

@七禾页话

5、开启远程登录

不管是通过cmd运行bash,还是开始菜单栏运行Linux系统,在使用中不是很方便,比如复制粘贴、记录log等等,都无法很舒服的实现。

在简单的摸索后,终于实现了使用putty、secureCRT、xshell等软件的远程登录。

第一步是要先检查子系统中是否开始了sshd服务,如果没有开启,使用相应命令开启。

@七禾页话

然后配置一下sshd服务(vi /etc/ssh/sshd_config),比如修改一下port等等,比较重要的是要检查是否允许使用密码登录,修改完成需要重启ssh服务:

@七禾页话

Note:对于图片中could not load host key的错误,可以通过执行“dpkg-reconfigure openssh-server”来解决:

@七禾页话

接下来就可以通过远程登录Linux子系统了(IP:127.0.0.1,Port:sshd_config中设置)。

@七禾页话

注意:最新的Ubuntu比如24.04已经默认安装了ssh,但是尝试启动ssh服务的时候可能会遇到 no hostkeys available的问题:

代码语言:javascript
复制
左右滑动
[root@wsl:~]# service ssh status 
 * sshd is not running 
[root@wsl:~]# service ssh start 
 * Starting OpenBSD Secure Shell server sshd 
 sshd: no hostkeys available -- exiting. 
[fail] 

解决方案是通过ssh-keygen -A创建密钥即可:

代码语言:javascript
复制
左右滑动
[root@wsl:~]# ssh-keygen -A 
ssh-keygen: generating new host keys: RSA DSA ECDSA ED25519 
[root@wsl:~]# 
[root@wsl:~]# service ssh start 
 * Starting OpenBSD Secure Shell server sshd         [ OK ] 
[root@wsl:~]# 
  • -A 对于不存在主机密钥的每种密钥类型(rsa、dsa、ecdsa 和 ed25519),生成具有默认密钥文件路径、空密码、密钥类型的默认位和默认注释的主机密钥。

6、开机自启动安装的Linux中的ssh服务

在使用的过程中发现一个问题,就是每次Windows系统重启后,都需要打开Linux系统,然后开启ssh服务后才能再次远程登录,完全没有了什么便利性。

多次尝试后找到了其解决办法,就是通过Windows开机自启动功能调用一个子系统里的脚本来实现,具体设置如下。

首先,要在Linux系统里写一个脚本,并通过chmod命令给脚本添加运行权限,脚本内容如下:

代码语言:javascript
复制
##左右滑动
echo "<在第三章初始化中设置的密码>" | sudo -S /usr/sbin/service ssh start

@七禾页话

然后在Windows下写一个vbs程序(如wsl.vbs),并放到开机自启动的路径下,vbs内容如下:

代码语言:javascript
复制
set ws=wscript.createobject("wscript.shell")
ws.run "C:\Windows\System32\bash.exe",0
ws.run "C:\Windows\System32\bash -c '/usr/sbin/ssh_start'",0

自启动路径:%AppData%\Microsoft\Windows\Start Menu\Programs\Startup

@七禾页话

接下来就可以开机后直接打开secureCRT等远程登录软件顺畅使用Linux子系统了。

Note:朋友说Mobaxterm直接集成了wsl,所以如果使用Mobaxterm不需要vbs自启动可直接登录wsl。

7、后记和体验

自从电脑使用Win10系统后,Cygwin再也没有安装过,VMWare安装也是为了做K8s等实验,至于其他的日常Linux工作,基本都在使用wsl,wsl的Linux里可以使用几乎所有的Linux服务,比如验证自己写的shell脚本、Python脚本等,而且可以在Windows主系统里写代码,然后直接在wsl中验证,这是因为Linux子系统可以直接读取主系统的文件,主系统的各个分区也是自动挂载的:

@七禾页话

最后,虽然wsl还有一些局限,比如没有Linux图形界面(但是Linux使用,尤其是运维,还是得靠CLI),再就是不能使用docker等容器技术(wsl2已经可以了),所以想要做更复杂的实验比如K8s等还是要使用BVirtualBox或者VMWare等虚拟机方案,或者自建服务器。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 七禾页话 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、开启WSL功能
  • 2、安装一个Linux发行版本
    • 2.1、通过微软商店GUI安装
      • 2.2、通过wsl命令行安装
      • 3、初始化Linux系统
      • 4、运行Linux子系统
      • 5、开启远程登录
      • 6、开机自启动安装的Linux中的ssh服务
      • 7、后记和体验
      相关产品与服务
      容器服务
      腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档