使用 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 其实很简单,只需要两个步骤即可:
-
打开 WSL
需要以管理员的身份打开 PowerShell,执行以下命令:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
运行完毕,重启即可。
-
下载 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 下能正常。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于