
Windows Subsystem for Linux(简称WSL)是一个为在Windows 10上能够原生运行Linux二进制可执行文件(ELF格式)的兼容层。
它是由微软与Canonical公司合作开发,目标是使纯正的Ubuntu 14.04 "Trusty Tahr"映像能下载和解压到用户的本地计算机,并且映像内的工具和实用工具能在此子系统上原生运行。
WSL包含内容:
WSL是一些组件的集合,允许原生的Linux ELF64二进制文件跑在Windows上。它同时包括了用户态和内核态组件,主要包含以下部分:
1、用户态会话管理服务处理Linux实例的生命周期。
2、Pico provider drivers (lxss.sys, lxcore.sys)“翻译”系统调用,以模拟Linux内核。
3、Pico进程管理原生的用户态Linux(比如/bin/bash)。
WSL 是适用于 Linux 的 Windows 子系统,可让开发人员按原样运行 GNU/Linux 环境 - 包括大多数命令行工具、实用工具和应用程序 - 且不会产生传统虚拟机或双启动设置开销。
WSL 分为两个版本,一个是 WSL1,一个是 WSL2,WSL2 是 WSL1 的升级版,主要优势是:
WSL2 建议不要跨 *** 作系统使用文件,若想获得最快的性能速度,请将文件存储在 WSL 文件系统中,在存储时,使用 Linux 文件系统根目录: wsl$Ubuntu-20.04home Project 。
访问 WSL2 文件系统,可以运行命令WIN+R 或在文件资源管理器地址栏中键入 wsl$ ,以查找相应的分发名称并访问其根文件系统。
大多数情况下我们会使用 WSL2,但在以下情况,请考虑使用 WSL1:
可以使用localhost 从 Windows 上访问 Linux 分发版中的应用。
如果要从 Linux 分发版访问 Windows 上运行的网络应用,则需要使用主机的 IP 地址。你可以执行以下步骤来使其可行。
当使用远程 IP 地址连接到应用程序时,它们将被视为来自局域网 (LAN) 的连接。这意味着你需要确保你的应用程序可以接受 LAN 连接。例如,你可能需要将应用程序绑定到0.0.0.0 而非 127.0.0.1 。
当使用 WSL 1 分发版时,如果计算机设置为可供 LAN 访问,那么在 WSL 中运行的应用程序也可供在 LAN 中访问。
这不是 WSL 2 中的默认情况,WSL 2 有一个带有其自己独一无二的 IP 地址的虚拟化以太网适配器。目前,若要启用此工作流,你需要执行与常规虚拟机相同的步骤。下面是一个示例 PowerShell 命令,用于添加侦听主机上的端口 4000 的端口代理并将其连接到端口 4000,并使用 IP 地址 192.168.101.100 连接到 WSL 2 VM。
使用wsl 可以在 CMD 或 PowerShell 运行 Linux 命令,示例:
以这种方式运行的命令使用的是同一个工作目录,并且以 WSL 默认用户的身份运行,拥有与调用方进程和终端相同的 Windows 管理权限。
WSL 可以使用[tool-name].exe 直接从 WSL 命令行运行 Windows 工具。例如, notepad.exe 。
以这种方式运行的应用程序具有相同的工作目录,拥有与 WSL 进程相同的权限,以活动 Windows 用户的身份运行,显示在 Windows 任务管理器中。
WSL 还有一些高级用法,比如更改磁盘大小,文件权限,环境变量等,具体配置可以参考官方文档。
npm全局安装报错,无法用npm install -g进行全局安装
内存泄漏,wsl2的内存会越用越大,无法回收
跨文件系统的文件访问和传输速度低下(跨文件系统指的是win中的文件(在wsl就是/mnt/下的文件)与wsl中的文件(wsl中非/mnt/下的文件)
热重载只能检测wsl中的文件变化,也就是说如果项目是在/mnt/下的话就无法热重载,保存修改之后必须重新npm run dev
以上问题直至目前为止(20201210)找不到解决方案
我也不知道我一个写前端的到底是哪根筋抽了要去用Linux。。。。
更新:第一个问题貌似有解决方案(https://github.com/Microsoft/WSL/issues/1375里面edjroot的方案):
wsl下运行sudo chown -R $(whoami) /mnt/c/Users/edjroot,(edijroot换成自己Windows的用户名),然后再sudo npm install -g
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)