WSL 是 Windows 操作系统的一项功能,使你能够直接在 Windows 上运行 Linux 文件系统以及 Linux 命令行工具 和 GUI 应用,以及传统的 Windows 桌面和应用。WSL 2 仅适用于 Windows 10 版本 1903、内部版本 18362 或更高版本,或 Windows 11。
在 VirtualBox、Vagrant Box、VMware Workstation、Docker 等软件虚拟环境中运行Linux系统,会占用相当多的 CPU、内存、硬盘空间 等资源,再开个浏览器、PhpStorm、QQ、微信,不过分吧,然而这样 CPU 利用率曲线图马上会飙升 像珠穆朗玛峰,16GB内存的用量也是直接登顶。实在受不鸟了!
最近系统卡得不行,心一横 去下载了一个微软官方的 Win10 ISO 重装了下系统,安装时选择了专业版,重装过程出乎意料的快速,居然比 Ghost 系统安装 更快、更稳、更简单!装好后开机几秒钟就直接进去了,桌面只有一个回收站!没有别的图标!这是从未体验过的真正的纯净版系统啊!于是果断把以前收藏的Ghost 系统、以及“系统之家”之类的网站收藏夹 统统删除,接下来一顿操作猛如虎,把微软自带的好多软件都 通通卸载掉,进入系统高级设置,设置系统环境变量,把TEMP 目录都改为D:\Temp\xxx,把 C 盘的虚拟内存取消 设到 D 盘,安装纯净版 微PE,重启,进入 PE,删除 C 盘的虚拟内存文件、以及用户目录下的各种 缓存文件,然后 把 C盘 Ghost 打包备份,轻车熟路。接下来就可以 使劲的捣鼓系统了,毕竟 有备无患嘛!
重启系统,秒进,用 DiskGenius 把以前的虚拟机磁盘里面的文件复制出来,删除掉虚拟磁盘,硬盘瞬间释放掉十几个 GB,“红盘” 终于变成 “蓝盘” 了。心里一下子也变得宽敞了。下一步是要直奔主题了!有点小激动啊!下面 动作太快,有掉链子(省略步骤) 的地方,请担待些!
进入 “控制面板\程序\程序和功能”,对,就是那个 “卸载或更改程序” 界面,点击左侧的 “启用或关闭 Windows 功能”,弹出个小小窗口,里面有好多选项,拉长一点吧。我勾选了 “适用于 Linux 的 Windows 子系统” > 点确定按钮 >重启系统。
下载 Linux 发行版:
你可以直接下载 可执行文件 来安装,跟安装 普通应用一样的,很简单。
旧版 WSL 的手动安装步骤 | Microsoft Docs
/Ubuntu_..424.0_x64.appx
下面直接玩 命令行吧:
在 PowerShell 或 Windows命令提示符(CMD)或 Windows Terminal、或 Git Bash 中 使用 "wsl" 命令 就可以转玩Linux 子系统了。
##查看可用的 Linux 发行版列表:
wsl --list --online
或
wsl -l -o
##安装 默认的 Linux 发行版 (Ubuntu):
wsl --install
##安装指定的 Linux 发行版:
wsl --install -d <DistroName>
<DistroName> 是发行版名称,如:
wsl --install -d Ubuntu-20.04
我的 Ubuntu-20.04 的默认安装目录是:
%LocalAppData%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState
另外还有两个文件:
%LocalAppData%\Microsoft\WindowsApps\ubuntu.exe
%LocalAppData%\Microsoft\WindowsApps\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\ubuntu.exe
稍后会提示输入 系统用户和密码,然后 正常的话 就 登录 Ubuntu 系统了:
……
Welcome to Ubuntu 20.04.3 LTS (GNU/Linux 4.4.0-19041-Microsoft x86_64)
##列出已安装的 Linux 发行版:
wsl -l
wsl -l -v
初始安装的子系统,列出的是 “Ubuntu-20.04 (默认)” 我的为什么是 “Ubuntu_20 (默认)” 呢?
因为我把默认的子系统 (在 C 盘) 做好个性化配置后,导出系统,然后删除它,然后再导入 并重命名了,后面会讲的。
##运行默认的 Linux 发行版:
wsl
或
bash
0.1 秒进入Ubuntu !毫不拖泥带水!根本不要开机过程!丝滑得 不要不要的。
##直接进入 Linux 家目录:
wsl ~
##用 Win 命令行 执行 Linux 子系统内部命令:
wsl -- <命令>
如:
wsl -- ifconfig
wsl -- sudo apt update
wsl -- sudo apt upgrade
##运行指定的 Linux 发行版:
wsl -d <DistroName>
wsl -d <DistroName> -u <UserName>
如:
wsl -d Ubuntu-20.04
wsl -d Ubuntu-20.04 -u root
##设置默认 Linux 发行版:
wsl --set-default <DistroName>
##更新 Linux 发行版 内核版本:
wsl --update
##关闭所有正在运行的发行版:
wsl --shutdown
##关闭指定的发行版
wsl -t <DistroName>
如:
wsl -t Ubuntu-20.04
##检查 WSL 状态:
wsl --status
显示结果:
默认分发:Ubuntu-20.04
默认版本:2
请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化。
有关信息,请访问 https://aka.ms/wsl2-install
可以从 Linux Bash shell 中访问本地计算机的文件系统,例如,你的 C盘 装载在 /mnt/c 下。
cd /mnt/c
cd /mnt/d
##卸载本地磁盘:
sudo umount /mnt/e
##导出 WSL 映像
wsl --export <DistroName> <FileName>
如:
wsl --export Ubuntu-20.04 E:\WSL\WSL_Ubuntu_20.04_LTS.tar
导出、导入 功能,太赞了!配置好开发环境之后,导出一个包,随身带!比小姐姐的 LV 包包 还要香!我有包我怕谁?
##导入 WSL 映像
wsl --import <DistroName> <InstallLocation> <FileName>
<InstallLocation> 是安装路径,<FileName> 是之前导出的 xxx.tar 文件路径,如:
wsl --import Ubuntu_20 D:\WSL\Ubuntu_20 E:\WSL\WSL_Ubuntu_20.04_LTS.tar
意思是把之前 配置好的Ubuntu 系统包,导入到D:\WSL\Ubuntu_20 目录 下,记得先手动创建一下这个目录啊,不然导入会失败的。
我这里还建立了一个 启动脚本start.bat 和 一个关机脚本 shutdown.bat,毕竟 懒嘛,点点鼠标总比输入命令快。
##卸载 WSL 分发版:
wsl --unregister <distroName>
如:
wsl --unregister Ubuntu-20.04
毕竟 我已经把 配置好的Ubuntu 系统 导入到 D:\WSL 去了,C 盘中的那个 默认的子系统 占我心爱的空间,是时候卸载它了! ^_^ ^_^ ^_^
卸载后 可以删除默认的安装目录:
rmdir /s/q "%LocalAppData%\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc"
你的目录可不一定是上面这个啊,请自行研究,像这样的:
rmdir /s/q "%LocalAppData%\Packages\***Ubuntu***_***"
------------------------------------------------------------------------------------------------
##在 WSL Ubuntu 18.04 中设置 免密码 sudo:
sudo bash -c "echo '$USER ALL=(ALL) NOPASSWD: ALL' >/etc/sudoers.d/$USER"
##Win10 Linux WSL 子系统添加开机启动任务:
WSL 中不支持通过 rc.local 来实现开机启动,无法通过 systemctl 设置自启动服务。
解决方法是 通过添加 windows 开机启动项 来启动 WSL 子系统中的服务。
网上好多教程 都是互相抄袭,根本没有亲自验证,以讹传讹,太气人了,下面是 九阴真经:
1、进入目录:
%AppData%\Microsoft\Windows\Start Menu\Programs\Startup
2、新建文件:
wsl_start.bat
内容如下(可能需要把相关命令改为适合你的机器的命令):
wsl -- sudo service ssh start
wsl -- sudo service bt start
wsl -- sudo service nginx start
wsl -- sudo service redis start
wsl -- sudo service php-fpm-80 start
#......
如果不需要开机启动,就把它放到D:\WSL\start.bat 文件里,发个快捷方式到桌面!
3、打完,收工!
------------------------------------------------------------------------------------------------
那么,怎样访问 子系统里面的服务呢?
太简单了。事实胜于雄辩,看看我的 就知道了。我在Linux子系统里安装了 宝塔面板,端口默认是8888,也不用改了,直接在 Windows 浏览器里输入127.0.0.1:8888/xxxxxx,就进入 BT 了,根本不需要做 端口映射,不需要设置网络、IP。就这么简单粗暴,这是登录后的样子:
新建一个站点:
修改Windows hosts:
Windows 浏览器里输入就能访问 站点了!
根本不需要做 端口映射,不需要设置网络、IP。就这么简单粗暴。
在Linux子系统里安装 Swoole,安装 Hyperf 框架,开发一个 WebSocket 服务,端口为 8180.
运行命令:
wsl
cd /mnt/e/www/swoole/hyperf
php bin/start.php start
编写一个WebSocket 客户端页面,连接上面的WebSocket 服务:
看来,杠杠的啊 !!!
怎么编写程序呢?程序在 E:\www\swoole\hyperf 下啊!Linux子系统 可以直接访问Windows 系统下的磁盘文件,不需要做复杂的 挂载磁盘、共享映射 等等操作。
至于怎么安装PhpStorm,怎么绿化,怎么安装Swoole,过程和画面太过真实,这里就不展示了,打下马赛克!
附件:
WSL_Ubuntu_20.04_LTS(纯净版Ubuntu,做了一些优化设置)
WSL_Ubuntu_20.04_BT_Nginx(纯净版Ubuntu,装了 BT 控制面板 和 Nginx)
提取码:wsl2
附件中的 子系统账号:
SSH 连接:127.0.0.1:2222 [root 123] [abc 123]
BT控制面板地址 http://127.0.0.1:8888/6f8c3bfc
username:admin88 password:admin123
下期预告:
《在 WSL 中安装 Erlang 、RabbitMQ》
最后,希望 结识一些Linux 高手、PHP 高手,前端高手,共同学习交流,开发个开源项目出来玩玩,顺便接一些外单,来安慰 (AV)一下 ^_^
...