使用 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

    运行完毕,重启即可。

  2. 下载 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 下能正常。

  • B3log

    B3log 是一个开源组织,名字来源于“Bulletin Board Blog”缩写,目标是将独立博客与论坛结合,形成一种新的网络社区体验,详细请看 B3log 构思。目前 B3log 已经开源了多款产品:PipeSoloSymWide 等,欢迎大家加入,贡献开源。

    2771 引用 • 4347 回帖 • 640 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    120 引用 • 351 回帖
  • wsl
    1 引用
  • Linux

    Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 Unix 的多用户、多任务、支持多线程和多 CPU 的操作系统。它能运行主要的 Unix 工具软件、应用程序和网络协议,并支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。

    511 引用 • 720 回帖 • 894 关注
感谢    关注    收藏    赞同    反对    举报    分享