以前在使用linux时,要么装双系统,要么是虚拟机,使用起来总是有些不方便。好在windows10支持了Ubuntu,可以直接原生运行Linux,虽然没有图形界面,但是已经够我们使用啦。(用了Linux还要图形界面??)

###开启方法

设置-更新与安全-针对开发人员选项中,启用"开发人员模式"

打开控制面板-程序和功能-打开"启用或关闭 Windows功能"-勾选"适用于Linux的Windows子系统(Beta)"

重启电脑

Win+R打开cmd

输入bash,按提示安装即可。

进阶设置可以参考这篇博客。

--------------------------------------------------------------

启用linux子系统


wsl2需要开启虚拟化 wsl2 虚拟机 区别_wsl2需要开启虚拟化

设置

wsl2需要开启虚拟化 wsl2 虚拟机 区别_nginx_02

Windows功能

wsl2需要开启虚拟化 wsl2 虚拟机 区别_nginx_03

安装ing...

  1. 系统升级到一周年正式版及以上(1607)
  2. 依次在设置-更新与安全-针对开发人员选项中,启用"开发人员模式"
  3. 在资源管理器中打开控制面板\所有控制面板项\程序和功能,打开"启用或关闭 Windows功能",勾选"适用于Linux的Windows子系统(Beta)"
  4. 重启电脑
  5. 命令行运行lxrun /install /y开始安装安装速度取决于网络情况,下载的文件在%localappdata%\lxss目录下lxss.tar.gz(181M),解压后大概500M,rootfs目录即为子系统根目录。
  6. 命令行运行bash进入Ubuntu默认使用的root帐号登录,通过指令passwd设置密码。
  7. 毕竟爱折腾,难免会把子系统环境(lxss目录)玩坏掉,因此干正事前最好先备份下以便快速还原。注意,不要直接右键复制或者打包,可能会导致文件权限丢失的。xcopy %localappdata%\lxss %localappdata%\lxss.bak /E
  8. 当然,如果你比较任性也可以不执行上一步的备份操作,通过命令行运行lxrun /uninstall /full轻松卸载子系统,重复上面的步骤即可重装,不过要注意下载速度时好时坏哦。

通过上面的步骤,已经启用了win10自带的linux子系统(WSL),感觉逼格提升了不少。当然,怎么能满足于此呢,接下来就要做一些环境的配置和进一步的挖掘。

更换数据源(参考)


在Ubuntu下我们可以通过apt-get命令

1.  
# 1.备份原来的数据源配置文件
2.  
cp /etc/apt/sources.list /etc/apt/sources.list_backup
3.  
# 2.编辑数据源配置文件
4.  
vim /etc/apt/sources.list
5.  
# 在这里我使用的是阿里云的数据源:
6.  
#==============================================================================================
7.  
# deb http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
8.  
# deb http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
9.  
# deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
10.  
# deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
11.  
# deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
12.  
# deb-src http://mirrors.aliyun.com/ubuntu/ trusty main restricted universe multiverse
13.  
# deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main restricted universe multiverse
14.  
# deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main restricted universe multiverse
15.  
# deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main restricted universe multiverse
16.  
# deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main restricted universe multiverse
17.  
#===============================================================================================
18.  
# 3.更新配置
19.  
apt-get update

与Windows通讯


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

  1. 通过tcp协议进行通讯(简单点说就是用网络,端口都是通的)
  2. 通过"/mnt/【盘符】/目录"的方式访问Windows目录试过在Windows的资源管理器中直接对子系统环境目录下的文件所做的修改不能被子系统锁识别,因此需要在bash下进行操作。

使用bash客户端软件cmder(参考)


Windows自带的命令提示符cmd并不是很好用(文本选中、复制粘贴等等操作),在这里使用cmder作为替代品,体验效果很好。去cmder官网下载mini版(完整版附带了模拟的bash环境,由于已经安装linux子系统,就不再需要了)的解压即可使用。

设置:

1.启动cmder直接运行bash:

  1. 进入"Settings>Startup>Startup options",
  2. 选择Command line,输入"bash -cur_console:p"

wsl2需要开启虚拟化 wsl2 虚拟机 区别_nginx_04

启动直接运行bash

2.通过软件底部的加号按钮新开标签页并进入bash:

  1. 进入"Settings>Startup>Startup options>Tasks",
  2. 选择"bash::bash",将指令修改为"cmd /c "bash" -cur_console:p -new_console:d:%USERPROFILE%"

wsl2需要开启虚拟化 wsl2 虚拟机 区别_ubuntu_05

新标签页

小贴士:将cmder目录添加到环境变量path中或者复制快捷方式到C:\Windows\System32"目录下,就可通过win+R快捷键快速打开了

运行图形界面程序(参考)


什么!linux不是就这么个黑白界面的窗口吗?是的,你没看错,就是图形界面,这里用到的是Xserver这个东东,至于原理什么的各位自行度娘吧。

wsl2需要开启虚拟化 wsl2 虚拟机 区别_bash_06

Xming

  1. 安装Xming 下载地址
  2. 安装完直接打开Xming即可
  3. 安装一个firefox测试apt-get install firefox
  4. 运行(在程序指令前加上"DISPLAY=:0 ")DISPLAY=:0 firefox
  5. 简化配置每次运行程序都要输入DISPLAY=:0挺累的,执行下列指令后重启bash即可省去这个步骤echo "export DISPLAY=:0.0" >> ~/.bashrc

Sublime Text 3安装


1.  
cd /
2.  
# 下载
3.  
wget https://download.sublimetext.com/sublime-text_build-3126_amd64.deb
4.  
# 安装
5.  
dpkg -i sublime-text_build-3126_amd64.deb
6.  
# 运行
7.  
subl

wsl2需要开启虚拟化 wsl2 虚拟机 区别_bash_07

什么鬼,报错了!应该是少了什么依赖包,嗯,安装下搞定。

apt-get -y install libgtk2.0-0

启动xfce桌面环境(参考)


图形界面程序都能运行了,不试试ubuntu的桌面环境怎么能甘心,于是又是噼里啪啦一顿搜索。一开始参照这篇国外的教程

1.  
# 1.安装xfce4
2.  
apt-get install xfce4
3.  
# 2.安装xubuntu桌面及附带应用
4.  
apt-get install xubuntu-desktop
5.  
# 3.启动
6.  
xfce4-session

wsl2需要开启虚拟化 wsl2 虚拟机 区别_ubuntu_08

启动报错了,解决办法 参考

1.   
2.  sed -i 's$<listen>.*</listen>$<listen>tcp:host=localhost,port=0</listen>$' /etc/dbus-1/session.conf

再次尝试打开,现在可以看到Xming打开了三个窗口,分别是桌面、任务栏、菜单栏。逼格是提升了不少,不过确实很卡。

wsl2需要开启虚拟化 wsl2 虚拟机 区别_bash_09

xfce4

在子系统上运行nginx


因工作项目中用到了ssi技术,而已经windows上已经编译好的nginx是不支持相对路径引用的(需要修改源码重新编译),只能委屈求全用着apache。不过既然现在都能跑linux了,那就试试在linux上运行nginx,然后在windows上进行调用。

1.  
apt install nginx
2.  
# 启动报错了:
3.  
nginx: [emerg] bind() to [::]:80 failed (98: Address already in use)
4.  
# 80端口实际没被占用,那应该就是ipv6的问题,将其禁用: 
5.  
vim /etc/nginx/sites-available/default
6.  
# 找到default_server ipv6only=on;注释掉
7.  
# 再次启动没报错,不过浏览器无法访问,80端口也没被使用,查看error.log
8.  
cat /var/log/nginx/error.log
9.  
# 看到错误信息:
10.  
ioctl(FIOASYNC) failed while spawning "worker process" (22: Invalid argument)
11.  
# 解决方法:禁用master进程模式
12.  
sed -i '1 a\master_process off;' /etc/nginx/nginx.conf

再次启动,终于没报错了,Windows中打开浏览器访问127.0.0.1,还真的实验成功了,不过nginx版本有点老,是1.4.6的。

1.  
# 1.安装依赖包
2.  
apt-get -y install build-essential autoconf libtool libxml2-dev openssl libcurl4-openssl-dev libbz2-dev libjpeg-dev libpng12-dev libfreetype6-dev libldap2-dev libmcrypt-dev libmysqlclient-dev libxslt1-dev libxt-dev libpcre3-dev libreadline-dev
3.  
# 2.下载源码
4.  
wget http://tengine.taobao.org/download/tengine-2.1.1.tar.gz
5.  
# 3.解压
6.  
tar -zxvf tengine-2.1.1.tar.gz
7.  
# 4.进入目录
8.  
cd tengine-2.1.1
9.  
# 修改源码...
10.  
# 5.配置
11.  
./configure --prefix=/usr/anyesu/nginx
12.  
# 6.编译&安装
13.  
make && make install
14.  
# 7.修改配置文件
15.  
sed -i '1 a\master_process off;' /usr/anyesu/nginx/conf/nginx.conf
16.  
# 8.启动
17.  
/usr/anyesu/sbin/nginx

上面的步骤,我试了两台电脑,其中一台报错:

nginx: [emerg] invalid port in resolver "fec0:0:0:ffff::1" in /usr/anyesu/nginx/conf/nginx.conf:123

wsl2需要开启虚拟化 wsl2 虚拟机 区别_wsl2需要开启虚拟化_10

/etc/resolv.conf

出现的fec0:0:0:ffff::1是个什么鬼,度娘了一番,貌似是dsn,打开dns配置文件/etc/resolv.conf果然发现了这东西,应该是Windows下只分配了1个dns,所以linux就给了这么两个默认值的吧。将它们注释掉,重新启动nginx,成功运行Tengine/2.1.1!注意,每次重启bash都会重置dns配置的

启用ssh(参考)


1.  
# 1.安装ssh(一般不需要这步)
2.  
apt install openssh-server
3.  
# 2.修改配置文件
4.  
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
5.  
vim /etc/ssh/sshd_config
6.  
#=======(修改以下选项内容)=========#
7.  
##
8.  
##
9.  
##
10.  
##
11.  
##
12.  
##
13.  
#================================#
14.  
# 3.启动ssh
15.  
service ssh start
16.  
# 4.如果提示“sshd error: could not load host key”,则用下面的命令重新生成
17.  
rm /etc/ssh/ssh*key
18.  
dpkg-reconfigure openssh-server

使用终端工具访问,这里我用的是WinSCP + PuTTY

wsl2需要开启虚拟化 wsl2 虚拟机 区别_wsl2需要开启虚拟化_11

WinSCP

wsl2需要开启虚拟化 wsl2 虚拟机 区别_wsl2需要开启虚拟化_12

PuTTY

WSL开机启动


wsl2需要开启虚拟化 wsl2 虚拟机 区别_ubuntu_13

任务管理器

1.  
# 1.新建开机启动脚本
2.  
vim /usr/anyesu/boot.sh
3.  
# 2.编辑
4.  
#================================================================
5.  
##!/bin/sh
6.  
# /usr/anyesu/nginx/sbin/nginx
7.  
# service ssh start
8.  
#$SHELL  #这句很重要,挂起当前脚本进程,进而维持base.exe一直打开
9.  
#================================================================
10.  
# 3.设置权限
11.  
chmod 777 /usr/anyesu/boot.sh
12.  
# 4.创建vbs脚本(D:\linux\wsl.vbs)
13.  
#==========================================
14.  
#"Wscript.Shell") 
15.  
#"bash /usr/anyesu/boot.sh",vbhide
16.  
#==========================================
17.  
# 5.创建计划任务

wsl2需要开启虚拟化 wsl2 虚拟机 区别_ubuntu_14

计划任务

wsl2需要开启虚拟化 wsl2 虚拟机 区别_ubuntu_15

创建基本任务

wsl2需要开启虚拟化 wsl2 虚拟机 区别_ubuntu_16

设置任务名称

wsl2需要开启虚拟化 wsl2 虚拟机 区别_ubuntu_17

设置任务触发条件——用户登录

wsl2需要开启虚拟化 wsl2 虚拟机 区别_nginx_18

设置任务操作——启动

wsl2需要开启虚拟化 wsl2 虚拟机 区别_nginx_19

设置任务操作——运行vbs脚本

wsl2需要开启虚拟化 wsl2 虚拟机 区别_wsl2需要开启虚拟化_20

运行计划任务

关于Linux发行版本


1. 升级Ubuntu版本至Xenial(16.04)

1.  
# 打开cmd,进入bash
2.  
bash
3.  
cd /4.  
# 下载openSUSE
5.  
wget -O openSUSE-42.2.tar.xz https://github.com/openSUSE/docker-containers-build/blob/openSUSE-42.2/docker/openSUSE-42.2.tar.xz?raw=true
6.  
# 解压
7.  
xz -d /openSUSE-42.2.tar.xz
8.  
mkdir rootfs
9.  
tar -C rootfs -xvf openSUSE-42.2.tar
10.  
# 退出bash,返回cmd
11.  
exit
12.  
# 进入子系统所在路径
13.  
cd %localappdata%\lxss
14.  
# 备份ubuntu用户空间(看下任务管理器中bash是不是彻底关闭了)
15.  
rename rootfs rootfs.ubuntu
16.  
# 使用openSUSE用户空间替换默认用户空间
17.  
move rootfs.ubuntu\rootfs rootfs
18.  
# 设置默认登录用户
19.  
lxrun /setdefaultuser root
20.  
# 重新进入bash
21.  
bash
22.  
#查看发行版本
23.  
cat /etc/issue