使用 WSL 在 Windows10 下辅助开发 有更新!

  LeungJZ

使用 WSL 在 Windows10 下辅助开发

什么是 WSL?

The Windows Subsystem for Linux lets developers run GNU/Linux environment – including most command-line tools, utilities, and applications – directly on Windows, unmodified, without the overhead of a virtual machine.

适用于 Linux 的 Windows 子系统允许开发人员直接在Windows上运行 GNU / Linux 环境(包括大多数命令行工具,实用程序和应用程序),不需要修改,无需虚拟机的开销。

WSL 是 Windows Subsystem for Linux 的简写,又叫 适用于 Linux 的 Windows 子系统 。它是一个为在 Windows10 和 Windows Server 2019 上能够原生运行 Linux 二进制可执行文件的兼容层。

使用 WSL 是有版本限制的,WSL 仅在版本 1607 之后的 64 位版本的 Windows 10 中可用。它也可在 Windows Server 2019 中使用。而且只是至此大部分 Linux 下的命令,工具,应用。

为什么要使用 WSL ?

主要还是从 Mac (自己的电脑)换到 Windows (公司的电脑),而且不太习惯 Windows 下的 PowerShell,刚好又没有用过 WSL,就刚好尝试下 WSL 辅助开发。

安装 WSL

微软官方已经有一个详细的安装文档: 传送门 ,但是只有英文版,没有中文的(英文好的同学们可以去贡献一下哈)。

使用 WSL 其实很简单,只需要两个步骤即可:

  1. 打开 WSL

需要以管理员的身份打开 PowerShell,执行以下命令:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

运行完毕,重启即可。

  1. 下载 WSL 子系统

打开 Microsoft Store,搜索 wsl 就会得到下列的结果。

选择一个自己熟悉、喜欢的 Linux 发行版,下载即可(个人比较熟悉 Ubuntu)。

不得不说,微软商店的下载速度还是很给力的。

等到你的开始菜单出现 Ubuntu18 的时候,点击并等待,设置完成后即可使用了。

以后,只需要在空白处,shift 加右键就能看到 在此处打开 Linux Shell

使用 WSL

WSL 的文件目录是真实存在于 Windows 下的目录中的。一般放置在

%USER_APP_DATA%\Local\Packages\CanonicalGroupLimited.Ubuntu18.04onWindows_79rhkp1fndgsc\LocalState\rootfs

下。

**但是强烈不建议在 Windows 下直接修改 WSL 中的文件。**但是可以在 WSL 中访问 Windows 下的文件系统,并使用 WSL 的工具,如 npm, yarn, git 等常用的应用。

在 WSL 中,Windows 的所有盘都挂载在 /mnt/ 目录下。

ljz@DESKTOP-CRVRBFO:~$ cd /mnt/
ljz@DESKTOP-CRVRBFO:/mnt$ ls
c
ljz@DESKTOP-CRVRBFO:/mnt/c$ ll
ls: cannot read symbolic link 'Documents and Settings': Permission denied
ls: cannot access 'hiberfil.sys': Permission denied
ls: cannot access 'pagefile.sys': Permission denied
ls: PerfLogs: Permission denied
ls: Recovery: Permission denied
ls: cannot access 'swapfile.sys': Permission denied
ls: 'System Volume Information': Permission denied
total 408
drwxrwxrwx 1 ljz  ljz     512 Jan 24 22:12 '$Recycle.Bin'/
drwxrwxrwx 1 ljz  ljz     512 Jan 29 14:55  ./
drwxr-xr-x 1 root root    512 Jan 29 15:18  ../
-r-xr-xr-x 1 ljz  ljz       1 Sep 15 15:28  BOOTNXT*
-r-xr-xr-x 1 ljz  ljz    8192 Jan 24 20:24  BOOTSECT.BAK*
dr-xr-xr-x 1 ljz  ljz     512 Jan 29 11:51  Boot/
lrwxrwxrwx 1 ljz  ljz      12 Jan 24 20:28 'Documents and Settings'
drwxrwxrwx 1 ljz  ljz     512 Jan 24 21:38  Intel/
drwxrwxrwx 1 ljz  ljz     512 Jan 29 14:55  OneDriveTemp/
d--x--x--x 1 ljz  ljz     512 Sep 15 15:33  PerfLogs/
dr-xr-xr-x 1 ljz  ljz     512 Jan 29 15:00 'Program Files'/
dr-xr-xr-x 1 ljz  ljz     512 Jan 29 14:59 'Program Files (x86)'/
drwxrwxrwx 1 ljz  ljz     512 Jan 29 14:59  ProgramData/
d--x--x--x 1 ljz  ljz     512 Jan 24 20:26  Recovery/
d--x--x--x 1 ljz  ljz     512 Jan 24 21:31 'System Volume Information'/
dr-xr-xr-x 1 ljz  ljz     512 Jan 24 21:30  Users/
dr-xr-xr-x 1 ljz  ljz     512 Jan 29 14:55  Windows/
-r-xr-xr-x 1 ljz  ljz  408342 Jan 27 13:23  bootmgr*
-????????? ? ?    ?         ?            ?  hiberfil.sys
-????????? ? ?    ?         ?            ?  pagefile.sys
-????????? ? ?    ?         ?            ?  swapfile.sys

可见,还是有点不完美,但是没关系,不影响开发。

安装常用软件

一键安装的小脚本(基于 Ubuntu16.04 xenial)可以参考这里: 传送门

更换 vscode 的终端

ctrl + , 唤出设置,在 json 模式下,加入:

{
    ...
    "terminal.integrated.shell.windows": "C:\\WINDOWS\\sysnative\\bash.exe",
	...
}

重启就可以看到终端里,默认是 bash 了:

跑 vue 项目简直美滋滋。

dos2unix

在 Mac 上写的 sh 脚本,放在 Windows 下无法运行(废话),在 wsl 中也无法正常运行,报错:

ljz@LiangJZ:/mnt/c/Users/project$ ./deploy.sh
./deploy.sh: line 2: $'\r': command not found
./deploy.sh: line 9: $'\r': command not found
./deploy.sh: line 10: $'\r': command not found
./deploy.sh: line 47: syntax error: unexpected end of file
ljz@LiangJZ:/mnt/c/Users/project$

目测是因为在 Windows 下的换行是回车+换行符 \r\n ,而 Linux 是 \n ,因此不认识 \r 故报错。

这时可以使用 dos2unix 工具转换一下。

$ sudo apt install dos2unix
$ dos2unix ./deploy.sh
dos2unix: converting file ./deploy.sh to Unix format...

转换完毕即可在 wsl 中运行(此时 git 会发现文件被修改,尽管在 diff 窗口未发现被修改过)。

Enjoy

PS: 其实现在 PowerShell 已经挺不错了,只是,在 wsl 下能保持 Mac 下能正常。