介绍

适用于 Linux 的 Windows 子系统(英语:Windows Subsystem for Linux,简称WSL)是一个为在Windows 10和Windows Server 2019上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层

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

准备工作

  • Windows设置——>更新和安全——>针对开发人员——>开发人员模式

  • 控制面板——>程序——>程序和功能——>启用或关闭Windows功能——>适用于Linux的Windows子系统——>确定 (然后重启)

下载并安装Ubuntu

在应用商店中搜索Ubuntu,选择Ubuntu18.04,点击获取进行下载及安装,安装完毕点击启动会打开bash命令行提示我们设置用户名(常用的不具有root权限的用户)和密码。完成之后就可以随意折腾你的linux系统了。万一我们不小心把子系统折腾崩了,只需要像应用软件一样卸载掉再重新安装就可以了,有需要的话我们甚至还可以安装多个不同版本的子系统,真的很方便实用。

子系统存放在 C:\用户\【你的windows用户名】\ 下的隐藏AppData文件夹

C:\用户\【你的windows用户名】\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs

文件地址中[Ubuntu18.04]为对应的 WSL 使用的 Linux 发行版本

查看当前系统版本:lsb_release -a

软件源配置

源列表文件位于/etc/apt/sources.list,可以使用vim打开该文件,将官方的源注释掉,然后加入新的软件源。

1
2
cp /etc/apt/sources.list /etc/apt/sources.list_backup
vi /etc/apt/sources.list
  • 中科大的源
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
    deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
    deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
  • 阿里云的源
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
    deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
    更新配置
    1
    2
    sudo apt update
    sudo apt upgrade

SuperUpdate.sh 一键更换Linux软件源脚本

1
2
wget  git.io/superupdate.sh
bash superupdate.sh

检查是否安装 wget 和 ca-certificates

1
apt-get install -y wget && apt-get install -y ca-certificates

开启SSH服务

先通过 bash 进入子系统修改配置

1
vi /etc/ssh/sshd_config

如果文件不存在说明尚未安装,则执行安装

1
apt-get install openssh-server

vi 编辑配置

1
2
3
4
Port = 22 # 默认是22端口,如果和windows端口冲突或你想换成其他的否则不用动
#ListenAddress 0.0.0.0 # 如果需要指定监听的IP则去除最左侧的井号,并配置对应IP,默认即监听PC所有IP
PermitRootLogin no # 如果你需要用 root 直接登录系统则此处改为 yes
PasswordAuthentication no # 将 no 改为 yes 表示使用帐号密码方式登录

启动 ssh 服务

1
service ssh start

如果提示 sshd error: could not load host key 则需要重新生成 key

1
dpkg-reconfigure openssh-server

查看服务状态

1
2
service ssh status
# * sshd is running 显示此内容则表示启动正常

重置密码

1
2
passwd root *** 
# passwd [username] ***

配置防火墙开启端口才能被其他PC访问

  • Windows Defender 安全中心——>高级设置——>入站规则——>新建规则
  • 端口——>tcp——>特定端口——>填入刚刚设置的 Port 默认 22——>允许连接——>提交

WSL 服务开机自启动

进入WSL 中,创建并编辑文件

1
vi /etc/init.wsl

vi 编辑 init.wsl 文件内容为

1
2
3
#! /bin/sh
/etc/init.d/ssh $1
/etc/init.d/redis-server $1

WSL 中有很多有用的服务,你可以按需删改 /etc/init.wsl ,但没必要塞很多东西进去影响你的启动速度,比如 mysql/supervisord/mongodb,可以需要的时候再启动

设置init.wsl 文件权限为可执行,所有者为 root

1
sudo /etc/init.wsl [start|stop|restart]

编辑sudoers,避免使用root权限时输入密码

1
sudo visudo

sudoers内容添加一行

1
sudo ALL=NOPASSWD: /etc/init.wsl

也可以在 /etc/sudoers.d 目录下面建立 nopasswd 文件,内容为:%sudo ALL=NOPASSWD: /etc/init.wsl

创建一个startservice.vbs脚本

1
2
Set ws = WScript.CreateObject("WScript.Shell")
ws.run "ubuntu1804 run sudo /etc/init.wsl start", vbhide

放到Windows10启动文件夹下 实现开机自启

  • 开始——>运行——>输入shell:startup打开启动文件夹——>startservice.vbs脚本放进去——>重启系统

Windows10下按照你 WSL 使用的 Linux 发行版创建相应的startservice.vbs脚本

  • Debian
    1
    2
    Set ws = CreateObject("Wscript.Shell")
    ws.run "debian run sudo /etc/init.wsl start", vbhide
  • ubuntu 16.04
    1
    2
    Set ws = CreateObject("Wscript.Shell") 
    ws.run "bash -c 'sudo /etc/init.wsl start'", vbhide

结语

子系统安装完成,安装软件就没啥说的了,现在该装啥就装啥,跟平时操作 Linux 服务器基本上一样的

子系统和 win10 是使用的相同网络,端口也都是共用的,避免端口占用冲突

参考: