WSL2、zsh 和 docker。通过 Windows 运行 Linux。
或者
妥协固然好,但说到科技,鱼与熊掌兼得才是王道。
我通常用来开发的机器坏了。Windows
Subsystem for Linux 2.0刚刚发布,所以我决定用它来配置另一台机器。最终,它简直太棒了。我刚刚在VSCode中的一个Oh My ZSH终端窗口启动了一个使用Docker的全栈应用程序。它的启动速度比在 Windows 上原生启动的速度还要快。我使用的是 Windows 10 家庭版,这意味着Hyper-V虚拟化技术通常不可用。但WSL2可以让你利用它(如果你的硬件支持的话)。
这篇文章描述了我设置它的步骤。
篇幅会很长,所以系好安全带!💪
安装 Insider 预览版
截至撰写本文时,WSL2 已在最新内部预览版中可用。
如果尚未安装,安装过程相当简单。
- 查找内部程序并按照步骤激活它。
在撰写本文时,您必须在出现提示时选择快速更新。
- 运行 Windows 更新
经过耐心的小小考验和几次重启后,您刚刚安装的版本的水印会出现在桌面的右下角。
激活可选功能
WSL 和 WSL2 使用一些默认未激活的功能,因此有必要启用这些功能。
这可以通过GUI实现,通过“打开或关闭 Windows 功能”或通过提升的 Powershell 提示符。
- GUI 选项:
要使用 WSL,请启用恰当命名的“Windows Subsystem for Linux”功能。
- 通过 Powershell:
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
无论您选择哪个选项,都需要重新启动。
WSL2 的功能
对于 WSL1 来说,这已经足够了。
要使用 WSL2,首先请确保在BIOS中启用了虚拟化功能。WSL2
使用 Hyper-V 技术。该技术通常仅在 Windows 10 专业版上可用,但 Windows 10 家庭版也可以将其用于 WSL2。
在BIOS中启用虚拟化功能,大多数主板品牌的设置都有所不同。
在我的MSI主板上,该选项被称为“虚拟化技术”,隐藏在超频设置中。
下一步:在 Windows 中启用另一个可选功能!
同样,您可以使用 GUI 或提升权限的 Powershell 窗口。
启用的选项称为“虚拟机平台”。
- 图形用户界面
- Powershell
Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
安装发行版
重启完成后,你可以前往微软商店安装你最喜欢的 Linux 发行版。我选择了 Ubuntu,因为这个发行版有很多安装说明和其他文档。
在您刚刚安装的发行版的第一次启动时(它以终端窗口的形式出现),当您想要以超级用户身份执行操作时,系统会要求您输入密码()。sudo
WSL1 到 WSL2
要检查安装了哪个版本的 WSL,您可以在 Powershell 中运行命令。
wsl --list --verbose
# or
wsl -l -v
如果版本号为 2,则所有系统均正常运行!
如果不是,则将那只小狗从 1 转换为 2。
wsl --set-version <distro-name> 2
# in my case
wsl --set-version Ubuntu 2
输出会告诉你此操作可能需要一段时间。
它不是那种只显示 5 秒后完成的操作。这里花了大约 10 分钟。
至此,WSL2 已准备就绪。
打开你安装的发行版将显示一个 bash 提示符。
Windows Subsystem for Linux 2 内置了真正的 Linux 内核。
之前有一个内核兼容层,功能有限。
用某个木偶的话来说,它现在是一个真正的男孩了。
鼓励 WSL2 用户将文件放置在 Linux 根文件系统中。
这样,与 WSL1 相比,他们将能够享受文件性能的提升。
在 WSL2 中,您现在可以在 Windows 中访问 Linux 中的文件,反之亦然。
在 WSL1 中,人们一直警告不要在 Windows 中修改 Linux 文件,因为这可能会导致一些不好的事情发生。哇哦,有点吓人👻(但说实话,这确实是个坏主意。)
有关更改的更多详细信息,请参阅 Microsoft 的WSL2 发布博客文章
安装工具
让我们开始加载一些必要的工具。Windows
端还需要安装一些工具,其余的都是 Linux 工具。
我将为 Windows 安装两个软件:VSCode和git for Windows。
记得将 git 的 autocrlf 设置为 input。VSCode 处理得很好。
在 Windows 中打开一个终端!
git config --global core.autocrlf input
在开始安装 Linux 工具之前,我们将更新已经安装的软件包。
从现在开始,操作发生在您的 Linux 终端中!
sudo apt update
sudo apt upgrade
更多准备,安装node-gyp的构建工具
sudo apt install build-essential
Git
这个也应该安装在Linux端。
sudo apt install git
安装 git 后,记得进行配置。
这里特别需要注意的是,将 autocrlf 设置为 input。
git config --global core.autocrlf input
Node 和 NPM
您可以将其作为独立软件包安装。
现在我们可以利用所有这些 Linux 工具了,我将使用nvm,以便更轻松地使用不同版本。
nvm repo有出色的安装说明。
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
安装完成后重启终端。
确认安装成功的方法如下:
command -v nvm
它应该返回:nvm
仅此而已,没有版本号,只有那个字符串。
要安装最新的稳定版本的节点:
nvm install node # "node" is an alias for the latest version
当节点发布新版本时,您可以再次运行相同的命令。
你需要告诉 nvm 你想要使用哪个版本的 node。
这样下次启动 Linux 发行版时,你就必须使用这个版本了。
nvm use node
当您正在进行的项目需要不同版本的节点时,请指定该版本。
nvm use v<version number>
# or if the project has a valid .nvmrc file
nvm use
手动操作似乎很烦人,对吧?
有很多方法可以解决这个问题。本文稍后会“修复”这个问题。
Docker
- 通过更新包索引和安装依赖项来开始。
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common
- 添加 Dockers 的官方 GPG 密钥。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
- 通过运行以下命令来验证:
sudo apt-key fingerprint 0EBFCD88
您应该在输出中看到完整的密钥。
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
- 将 Docker 存储库添加到您的存储库列表中。
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
- 再次更新存储库列表并安装 Docker CE。
sudo apt update
sudo apt install docker-ce
通常情况下,Docker 引擎会在安装后自动启动。但
我的情况并非如此,所以我手动启动了它。
sudo service docker start
- 通过启动 hello-world 容器来验证 Docker CE 是否正确安装。
sudo docker run hello-world
Docker Compose
作为管理docker容器的便捷工具,docker-compose
经常与一起安装docker-ce
。
- 下载当前稳定版本并将其放在
/usr/local/bin
文件夹中。
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
- 使文件可执行。
sudo chmod +x /usr/local/bin/docker-compose
- 验证安装。
docker-compose --version
# output: docker-compose version 1.24.0, build 0aa59064
纱
Yarn 是 Facebook 制作的 JavaScript 包管理器。
- 添加他们的 gpg 密钥。
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
- 添加他们的存储库。
echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
- 更新存储库列表并安装 Yarn。
--no-install-recommends
使用时跳过安装节点nvm
sudo apt update
sudo apt install --no-install-recommends yarn
- 验证安装。
yarn --version
更好的终端
当你打开终端时,实际上有两个部分在工作。
你看到并输入内容的是终端。
与终端通信并完成大部分工作的是Shell。
说实话,Windows 自带的终端实在太差劲了。
好消息:他们即将推出一个新终端,而且看起来真的很棒!
为了迎接新版本的发布,我不会对它做太多改动。反正我大部分时间都会使用 VSCode 中集成的那个。
7月3日编辑:Windows 应用商店现已提供预览版。我试用了,效果很棒!
更改集成的 VSCode 终端
VSCode 的集成终端极大地提升了工作效率。
让我们使用其中全新的 Linux Shell 吧。
打开集成终端时,您可以选择使用哪一个作为默认终端。
从出现的选项列表中选择 WSL,就完成了!
或者,编辑settings.json
以指向正确的位置。
"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\wsl.exe"
ZSH
我选择ZSH来替换单击开始菜单中的 Ubuntu 图标时打开的标准 bash shell。
由于 Ubuntu 中的包管理器,安装它只需一行。
sudo apt install zsh
启动 Ubuntu 时,您仍然会看到常见的 bash 提示符。
要从熟悉的 bash 提示符进入 zsh shell,请执行以下操作:
zsh
首次启动时会显示一个快速配置向导。
此处的选择并不重要,因为.zshrc
安装 oh-my-zsh 时生成的文件会被覆盖。我2
还是选择了此选项,并保留了默认设置。
zsh
每次启动时输入bash 很快就会变得乏味。
cd $home #navigate to your home directory on Linux
code .bashrc #open the bash configuration file in visual studio code
zsh
要在打开终端时自动启动,请将其添加到您的.bashrc
# Launch Zsh
if test -t 1; then
exec zsh
fi
哦我的天啊ZSH
zsh 的这个扩展具有最好的 URL 之一:ohmyz.sh
它还将启用大量不错的功能,这更为重要。
安装 oh-my-zsh 只需一行。
sh -c "$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"
这也将替换.zshrc
我们之前初始化的文件。
欣赏酷炫的 ASCII 艺术,标志着安装成功!
主题 oh-my-zsh
oh-my-zsh 自带了很多精美的主题,那就来安装一个漂亮的主题吧!
来看看它们的列表。
我喜欢 agnoster,所以我会选择它。
编辑该.zshrc
文件以启用它。
此文件也位于您的 Linux 主目录中(cd $home
前往那里)。
# .zshrc
# change the default theme
ZSH_THEME="robbyrussell"
# to the chosen theme
ZSH_THEME="agnoster"
重新启动终端以使其生效。
电力线字体
啊啊啊啊啊,它……坏了。😥
部分原因是这是一个奇特的提示,需要Powerline 修补的字体才能正确呈现。
您可以下载所需的特定字体并以此方式安装(双击文件并点击安装按钮),或者使用安装脚本一次性安装它们。
要一次性安装所有文件,首先克隆该仓库。
然后打开权限提升的 Powershell 窗口。
为了能够执行该install.ps1
文件,我们需要暂时开启执行策略。
Set-ExecutionPolicy Bypass
现在导航到克隆的 repo 并执行安装脚本。
.\install.ps1
您会看到与单独下载和安装每个字体时相同的事情发生,但当然要快得多。
不要忘记立即再次关闭执行策略!
Set-ExecutionPolicy Default
安装字体后,在终端应用程序中设置它们会将奇怪的框更改为图标。
请注意,Windows 中的标准终端在此之后仍然无法正常工作。它有很多限制,这次无法完全正常工作只是其中之一。
如前所述,我主要还是会在 VSCode 中使用终端,所以我将放弃使用标准终端。
在 VSCode 中设置终端字体后,所有图标都显示得很漂亮。
使用该命令列出目录和文件时的颜色ls
看起来仍然不太理想。
目录颜色
为了替换那些难看的颜色,可以使用名为 dircolors 的东西。
我将安装流行的solarized dircolors
选择您想要的主题并将文件下载到您的主目录。
curl https://raw.githubusercontent.com/seebi/dircolors-solarized/master/dircolors.ansi-dark --output ~/.dircolors
在 zsh 配置文件的底部添加一行以使用刚刚下载的内容。
# load dircolors
eval `dircolors ~/.dircolors`
好多了,现在看起来很棒!
oh-my-zsh 插件
oh-my-zsh 本身功能已经非常丰富。为了进一步提升效率,可以使用插件。
许多插件都随 oh-my-zsh 一起提供,因此安装它们就像在 中添加一行代码一样简单.zshrc
。
其他插件则需要更多努力,让我们从这些开始吧!
语法高亮
zsh-syntax-highlighting是一个方便的插件,它通过用绿色突出显示有效命令、用红色突出显示无效命令来防止语法错误。
要安装插件,首先克隆repo。
然后将脚本添加到你的.zshrc
。
# inside .zshrc add
source <path-to-the-script>
# I cloned the repo to the .zsh folder, so for me it was
source ~/.zsh/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
自动建议
zsh-autosuggestions会根据命令历史记录,建议下一步该输入什么,从而加快重复输入相同命令的速度。
它的安装遵循与我们上面安装的插件相同的模式。
首先克隆 repo,然后添加一行.zshrc
# .zshrc
source <path-to-the-script>
# I cloned the repo to the .zsh folder, so for me it was
source ~/.zsh/zsh-autosuggestions/zsh-autosuggestions.zsh
预装插件
您可以在此Github 页面上查看 oh-my-zsh 附带的插件列表。
每个插件都应该有一个 ,README.md
它会告诉你更多关于它的功能以及如何激活插件的信息。
大多数情况下,激活插件需要你将其添加到 中的插件列表中.zshrc
。
这就是我最终得到的结果:
plugins=(
git
node
npm
npx
nvm
z
)
这里我想推荐的插件是z。
它让导航到最近的文件夹变得简单。
你没看错,这不是拼写错误。
它是 frequent 和 recent 的缩写。
例如,我的博客位于~/projects/nicky-blog
。
如果我输入z blog
,z 就会带我到那里。
结果
呼!真是一段奇妙的旅程😅💦
效果非常棒,而且看起来也很棒!🎊🎉🎉🎉🎊