跳至主要内容

WLS2


Windows Subsystem for Linux 2

https://docs.microsoft.com/zh-cn/windows/wsl/

资料https://www.sitepoint.com/wsl2/

手动安装步骤

步骤 1 - 启用适用于 Linux 的 Windows 子系统

需要先启用“适用于 Linux 的 Windows 子系统”可选功能,然后才能在 Windows 上安装 Linux 分发。

以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

建议现在转到步骤 #2,更新到 WSL 2,但如果只想安装 WSL 1,现在可以重新启动计算机,然后继续执行步骤 6 - 安装所选的 Linux 发行版。 若要更新到 WSL 2,请等待重新启动计算机,然后继续执行下一步。

步骤 2 - 检查运行 WSL 2 的要求

若要更新到 WSL 2,需要运行 Windows 10。
对于 x64 系统:版本 1903 或更高版本,采用 内部版本 18362 或更高版本。
对于 ARM64 系统:版本 2004 或更高版本,采用 内部版本 19041 或更高版本。
低于 18362 的版本不支持 WSL 2。 使用 Windows Update 助手更新 Windows 版本。

若要检查 Windows 版本及内部版本号,选择 Windows 徽标键 + R,然后键入“winver”,选择“确定”。 更新到“设置”菜单中的最新 Windows 版本。

步骤 3 - 启用虚拟机功能

安装 WSL 2 之前,必须启用“虚拟机平台”可选功能。 计算机需要虚拟化功能才能使用此功能。
以管理员身份打开 PowerShell 并运行:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
重新启动 计算机,以完成 WSL 安装并更新到 WSL 2。

步骤 4 - 下载 Linux 内核更新包

下载最新包:适用于 x64 计算机的 WSL2 Linux 内核更新包

备注
如果使用的是 ARM64 计算机,请下载  ARM64 包。 如果不确定自己计算机的类型,请打开命令提示符或 PowerShell,并输入:systeminfo 查看 System Type 或 系统类型
运行上一步中下载的更新包。 (双击以运行 - 系统将提示你提供提升的权限,选择“是”以批准此安装。)

安装完成后,请继续执行下一步 - 在安装新的 Linux 分发时,将 WSL 2 设置为默认版本。 (如果希望将新的 Linux 安装设置为 WSL 1,请跳过此步骤。)

步骤 5 - 将 WSL 2 设置为默认版本

打开 PowerShell,然后在安装新的 Linux 发行版时运行以下命令,将 WSL 2 设置为默认版本:wsl --set-default-version 2

步骤 6 - 安装所选的 Linux 分发

打开 Microsoft Store,并选择你偏好的 Linux 分发版。
在分发版的页面中,选择“获取”。

首次启动新安装的 Linux 分发版时,将打开一个控制台窗口,系统会要求你等待一分钟或两分钟,以便文件解压缩并存储到电脑上。 未来的所有启动时间应不到一秒。

然后,需要为新的 Linux 分发版创建用户帐户和密码。(小写用户名)
此 用户名 和 密码 特定于安装的每个单独的 Linux 分发版,与 Windows 用户名无关。

重置 Linux 密码

若要更改密码,请打开 Linux 分发版(例如 Ubuntu)并输入以下命令:passwd
系统会要求你输入当前密码,然后要求输入新密码,之后再确认新密码。

忘记密码

如果忘记了 Linux 分发版的密码:
请打开 PowerShell,并使用以下命令进入默认 WSL 分发版的根目录:wsl -u root

如果需要在非默认分发版中更新忘记的密码,请使用命令:wsl -d Debian -u root,并将 Debian 替换为目标分发版的名称。

在 PowerShell 内的根级别打开 WSL 发行版后,可使用此命令更新密码:passwd <WSLUsername>,其中 <WSLUsername> 是 DISTRO 中帐户的用户名,而你忘记了它的密码。
系统将提示你输入新的 UNIX 密码,然后确认该密码。 在被告知密码已成功更新后,请使用以下命令在 PowerShell 内关闭 WSL:exit

祝贺你!现已成功安装并设置了与 Windows 操作系统完全集成的 Linux 分发!

启动

下载后,单击Microsoft Store应用程序上的启动”按钮,或“开始”菜单中的新Ubuntu图标

Ubuntu中初始文件夹 dangzenglong@DANG-PC:/mnt/c/Users/DANG$

安装 Windows 终端(可选)

https://docs.microsoft.com/zh-cn/windows/terminal/get-started
打开 Microsoft Store 下载 Windows Terminal,它可启用多个选项卡(在多个 Linux 命令行、Windows 命令提示符、PowerShell 和 Azure CLI 等之间快速切换)、创建键绑定(用于打开或关闭选项卡、复制粘贴等的快捷方式键)、使用搜索功能,以及使用自定义主题(配色方案、字体样式和大小、背景图像/模糊/透明度)。
https://docs.microsoft.com/zh-cn/windows/terminal/command-line-arguments?tabs=powershell

Windows Terminal 设置,打开文件json文件,它在
%LOCALAPPDATA%\Packages\Microsoft.WindowsTerminal_8wekyb3d8bbwe\LocalState

Windows Terminal(终端)主题

更新和升级包

# apt 是 Linux 发行版推荐的命令 ,apt 是 apt-get 和 apt-cache 命令的子集,为包管理提供必要的命令
# 推荐使用apt而不是apt-get
 sudo apt update
 sudo apt upgrade -y
 # cleanup
 sudo apt autoremove -y

如何在适用于 Linux 的 Windows 子系统中重置 Ubuntu(和其他 Linux 发行版)

右键“开始”按钮,选择“应用和功能”,搜索框中输入“Ubuntu”, 在找到的应用中点击“Ubuntu”(或 您的发行版名称)并单击“高级选项”,单击“重置”按钮

完成后,您将在“重置”按钮旁边看到一个复选标记。然后您可以像往常一样启动 Ubuntu。首次启动时,它会要求您设置用户名和密码。手动安装好之后输入小写用户名

重置同样适用于 Windows Terminal

从 Windows 访问 Linux 文件

在文件资源管理器地址栏或运行对话框中输入\\wsl$\,可以在网络路径上访问 Linux 文件。
列出了您安装的 Linux 发行版,因此您可以访问 Ubuntu 根目录\\wsl$\Ubuntu。
您的个人 Linux 文件通常存储在:\\wsl$\Ubuntu\home\<yourname>
例如:\\wsl$\Ubuntu-20.04\home\dangzenglong

映射网络驱动器

您可以通过\\wsl$\在文件资源管理器中打开\\wsl$\Ubuntu\,右键单击 Ubuntu 文件夹,然后选择Map network drive...来挂载网络驱动器。

从 Linux 运行 Windows 应用程序

在 cmd 或 PowerShell 中运行 wsl --shutdown 来重新启动分发。以便于可以在ubuntu中运行任何 Windows 可执行文件都可以从 Linux 启动(通常需要指定.exe扩展名)。

例如,要在文件资源管理器中打开当前 Linux 目录,请输入:
explorer.exe  会打开 此电脑
explorer.exe .  会打开 C:\Users\DANG 文件夹 也可以用powershell.exe /c start .
或.bashrc在记事本中编辑:notepad.exe ~/.bashrc
或者在 VS Code 中打开特定的项目目录:code ~/projects/mywebsite

从 Windows 访问 Linux 网络应用程序  (localhost)

要查找支持 Linux 发行版的虚拟机的 IP 地址:
从您的 WSL 发行版(即 Ubuntu),运行以下命令: ip addr 找到并复制接口inet值下的地址eth0。
如果您安装了 grep 工具,请通过使用以下命令过滤输出来更轻松地找到它: ip addr | grep eth0
使用此 IP 地址或者 localhost 连接到您的 Linux 服务器。

从 Linux 访问 Windows 网络应用程序 (主机 IP)

通过从 Linux 发行版运行以下命令来获取主机的 IP 地址: cat /etc/resolv.conf
复制以下术语的 IP 地址:nameserver。
使用复制的 IP 地址连接到任何 Windows 服务器。
cat /etc/resolv.conf | grep nameserver | awk '{print $2; exit;}'

安装 MongoDB

搭建 MongoDB 数据库只需要在 docker 里面跑一个容器
docker run -it -v mongodata:/data/db -p 27017:27017 --name mongodb --restart unless-stopped -d mongo

-p 27017:27017 将容器的27017 端口映射到主机的27017 端口

http://localhost:27017/
MongoDB 的默认数据目录路径是\data\db
注意: 在 MongoDB 中,数据库只有在内容插入后才会创建! 就是说,数据库创建后要创建集合(数据表)并插入一个文档(记录),数据库才会真正创建。

web 管理数据库

docker run -d --name mongo-express -e ME_CONFIG_MONGODB_SERVER=host.docker.internal -p 8081:8081 mongo-express

http://localhost:8081/


dangzenglong@DANG-PC:~$ docker port  mongodb
27017/tcp -> 0.0.0.0:27017
27017/tcp -> :::27017
dangzenglong@DANG-PC:~$ docker port  mongo-express
8081/tcp -> 0.0.0.0:8081
8081/tcp -> :::8081

dangzenglong@DANG-PC:~$ ss -ltn

如有以下报错:
docker: Error response from daemon: Ports are not available: listen tcp 0.0.0.0:8081: bind: An attempt was made to access a socket in a way forbidden by its access permissions.

在 Windows 上启用 Hyper-V 时,会保留许多动态端口,所以其他应用程序无法监听在这个端口。

首先,检查您所需的端口是否已保留
PS C:\Users\DANG> netsh interface ipv4 show excludedportrange protocol=tcp

如果您的端口在其中一个范围内,请停止 winnat:
PS C:\Users\DANG> net stop winnat

禁止对您所需的端口进行动态保留(例如,原始问题中所述的 50051):
PS C:\Users\DANG> netsh int ipv4 add excludedportrange protocol=tcp startport=50051 numberofports=1

Start your docker services 

重启winnat:
PS C:\Users\DANG> net start winnat

PS C:\Users\DANG> netstat -a -n -p tcp | findstr LISTENING


如何修复 docker:尝试连接到 Docker 守护进程套接字时权限被拒绝
sudo chmod 666 /var/run/docker.sock

运行以下docker命令以在容器中启动支持 PHP 7.4 的 Apache Web 服务器,该服务器将主机目录/var/www/html中的文件挂载到容器中:
docker run -it --rm -p 18080:80 --name php -v "$PWD":/var/www/html php:7.4-apache


>wsl -l -v
  • docker-desktop替换了之前使用的 Hyper-V VM 实现 Docker Desktop。这处理容器的引导和管理。
  • docker-desktop-data是存储您的图像和配置的地方;这实质上是对 Hyper-V 以前使用的虚拟硬盘的直接替换。

评论

此博客中的热门博文

自动发送消息

  # https://pyperclip.readthedocs.io/en/latest/ import pyperclip while True :     # pyperclip.copy('Hello, world!')     # pyperclip.paste()     # pyperclip.waitForPaste()     print ( pyperclip. waitForNewPaste ( ) )     # 获取要输入新的坐标,也可以通过autohotkey import time import pyautogui  as pag import os   try :     while True :         print ( "Press Ctrl-C to end" )         x , y = pag. position ( )   # 返回鼠标的坐标         posStr = "Position:" + str ( x ) . rjust ( 4 ) + ',' + str ( y ) . rjust ( 4 )         print ( posStr )   # 打印坐标         time . sleep ( 0.2 )         os . system ( 'cls' )   # 清楚屏幕 except KeyboardInterrupt :     print ( 'end....' )     # 打印消息 import pyautogui import time import pyperclip   content = """   呼叫龙叔! 第二遍! 第三遍! 第四遍...

学习地址

清华大学计算机系课程攻略 https://github.com/PKUanonym/REKCARC-TSC-UHT 浙江大学课程攻略共享计划 https://github.com/QSCTech/zju-icicles https://home.unicode.org/ 世界上的每个人都应该能够在手机和电脑上使用自己的语言。 http://codecanyon.net   初次看到这个网站,小伙伴们表示都惊呆了。原来代码也可以放在网上卖的?!! 很多coder上传了各种代码,每个代码都明码标价。看了下销售排行,有的19刀的卖了3万多份,额di神啊。可以看到代码的演示效果,真的很漂亮。代码以php、wordpress主题、Javascript、css为主,偏前台。 https://www.lintcode.com/ 算法学习网站,上去每天刷两道算法题,走遍天下都不怕。 https://www.codecademy.com/ 包含在线编程练习和课程视频 https://www.reddit.com/ 包含有趣的编程挑战题,即使不会写,也可以查看他人的解决方法。 https://ideone.com/ 在线编译器,可运行,可查看代码示例。 http://it-ebooks.info/ 大型电子图书馆,可即时免费下载书籍。 刷题 https://github.com/jackfrued/Python-100-Days https://github.com/kenwoodjw/python_interview_question 面试问题 https://github.com/kenwoodjw/python_interview_question https://www.journaldev.com/15490/python-interview-questions#python-interpreter HTTP 身份验证 https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication RESTful 架构详解 https://www.runoob.com/w3cnote/restful-architecture.html https://www.rosettacode.org/wiki/Rosetta_C...

mysql 入门

资料 https://dinfratechsource.com/2018/11/10/how-to-install-latest-mysql-5-7-21-on-rhel-centos-7/ https://dev.mysql.com/doc/refman/5.7/en/linux-installation-yum-repo.html https://www.runoob.com/mysql/mysql-create-database.html https://www.liquidweb.com/kb/install-java-8-on-centos-7/ 工具 https://www.heidisql.com/ HeidiSQL是免费软件,其目标是易于学习。 “ Heidi”使您可以从运行数据库系统MariaDB,MySQL,Microsoft SQL或PostgreSQL的计算机上查看和编辑数据和结构 MySQL 连接时尽量使用 127.0.0.1 而不是 localhost localhost 使用的 Linux socket,127.0.0.1 使用的是 tcp/ip 为什么我使用 localhost 一直没出问题 因为你的本机中只有一个 mysql 进程, 如果你有一个 node1 运行在 3306, 有一个 node2 运行在 3307 mysql -u root -h localhost -P 3306 mysql -u root -h localhost -P 3307 都会连接到同一个 mysql 进程, 因为 localhost 使用 Linux socket, 所以 -P 字段直接被忽略了, 等价于 mysql -u root -h localhost mysql -u root -h localhost 而 -h 默认是 localhost, 又等价于 mysql -u root mysql -u root 为了避免这种情况(比如你在本地开发只有一个 mysql 进程,线上或者 qa 环境有多个 mysql 进程)最好的方式就是使用 IP mysql -u root -h 127 .0 .0 .1 -P 3307 strac...