Start with WSL

WSL,Windows Subsystem for Linux,安装与使用基础。

Start with WSL

本文写于2018.06.27,阅读请注意时效性

适用于 Linux 的 Windows 子系统(英语:Windows Subsystem for Linux,简称WSL)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。它是由微软与Canonical公司合作开发,目标是使纯正的Ubuntu 14.04 "Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
WSL提供了一个微软开发的Linux兼容内核接口(不包含Linux代码),来自Ubuntu的用户模式二进制文件在其上运行。

简单来说就是在Windows上跑linux,比起虚拟机,没有图形化界面,占用资源较小。

目前Microsoft Store 已经上架了五种linux系统。
维基:en.wiki


安装

首先,来自微软(Microsoft)的官方文档,目前只有英文。
安装文档请直接点击 这里
安装需要win 10 16215及更高版本。

  1. win + s搜索输入powershell,右键以管理员身份运行,打开后运行以下代码,出现提示时重新启动计算机。
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

2.在Microsoft Store中寻找想安装的Linux发行版,并安装,以下为目前支持的Linux发行版,链接直达商店页面。

3.下载完成后启动程序,会打开一个命令行窗口,等待安装完成。
4.基本配置完成以后,窗口会提醒输入用户名及密码,每个子系统的用户名密码相互独立,与windows也没有关联。第一个账户为默认账户,每次打开自动登录,默认拥有sudo权限。


系统间通讯

目前子系统与 Windows 之间通过以下两种方式进行通讯

  • 通过 tcp 协议进行通讯(简单点说就是用网络,端口都是通的)
  • 通过 /mnt/【盘符】/目录 的方式访问Windows目录

自己的解决方案是windows访问子系统使用putty+winscp,linux访问win使用挂载。
wsl与windows公用网络端口,使用时应注意避免端口冲突。

设置ssh连接:

sudo apt-get remove openssh-server  #卸载openssh-server
sudo apt-get install openssh-server #重装openssh-server,这两步为可选项
vi /etc/ssh/sshd_config             #使用vi编辑器更改ssh设置
#============(修改以下选项内容)===========
# Port 7821(两系统不能同时使用22端口自行更改)   
# (取消注释)ListenAddress 0.0.0.0          
# UsePrivilegeSeparation no             
# PermitRootLogin yes                    
# (注释)StrictModes yes                
# PasswordAuthentication yes             
#========================================
service ssh start                  #启动ssh

到这里完成了一半,因为每次打开子系统都需要开启ssh服务,非常麻烦。下一步应编写脚本实现开机自启动,解决问题的思路:

解决这个问题分三个步骤:
1、添加启动项,让 bash.exe 随机启动
2、使用命令 sudo service ssh start 启动 sshd
3、因为 sudo service ssh start 命令需要输入密码不能自动化,所以需要 visudo 来免除输入密码的操作。

vi boot.vbs
#============(添加以下代码)===========
#set ws=wscript.createobject("wscript.shell")
#ws.run "C:\Windows\System32\bash.exe",0
#ws.run "C:\Windows\System32\bash.exe  -c 'sudo /usr/sbin/service ssh start'",0
#========================================
mv boot.vbs /mnt/c/Users/Your_User_Name/Documents #移动到文档
sudo visudo
#添加下列代码,注意替换用户名
#[YOUR_USER_NAME] ALL = (root) NOPASSWD: /usr/sbin/service
#========================================

完成上述步骤以后,在windows中将C盘文档中的文件 boot.vbs 移动至此目录:%AppData%\Microsoft\Windows\Start Menu\Programs\Startup

重启计算机,测试是否能使用putty通过 ip:127.0.0.1 // port:7821 连接子系统。


完成上述步骤就可以开始基本的linux使用,比如nginx,bash shell,node.js等本地调试,大部分代码与相应linux版本相似,也能用gun,但子系统并不能作为真正的OS使用,相比完整的linux os仍有区别,使用时请注意这一点。


除了官方文档,本文还参考了以下网站:
1.How to automatically start ssh server on boot on Windows Subsystem for Linux [github]

2.折腾 Bash on Windows 开启 SSHD 并开机启动

3.Windows10内置Linux子系统初体验