wsl2yes!
不需要虚拟机劣化,完全利用资源,直接支持GPU,对于开发和学习来说还有更香的选择吗?但是配置比虚拟机困难,很多逻辑没有虚拟机符合直觉。
基本操作
开启 WSL 环境
-
通过命令行: 在 Windows 的命令提示符(CMD)或 PowerShell 中输入以下命令:
wsl
或者,如果你有多个 WSL 分发版,可以指定要启动的分发版:
wsl -d Ubuntu-20.04
- 通过快捷方式: 你可以在开始菜单中找到安装的 WSL 分发版(如 Ubuntu),直接点击它即可启动。
设为默认
wsl --set-default <Distribution Name>
关闭 WSL 环境
要关闭 WSL 环境,可以使用以下命令:
-
退出当前 WSL 会话: 在 WSL 终端中,输入以下命令退出当前会话:
exit
-
停止所有 WSL 分发版: 你可以在 PowerShell 中使用以下命令停止所有运行的 WSL 分发版:
wsl --shutdown
-
停止特定的 WSL 分发版: 可以指定停止某个具体的 WSL 分发版。在 PowerShell 中使用:
wsl --terminate <DistributionName>
检查 WSL 状态
-
列出所有 WSL 分发版: 在 PowerShell 中使用以下命令列出所有已安装的 WSL 分发版及其状态:
wsl -l -v
-
查看 WSL 版本: 使用以下命令查看当前 WSL 的版本信息:
wsl --version
列出可用的 Linux 发行版
PowerShell复制
wsl --list --online
查看可通过在线商店获得的 Linux 发行版列表。 此命令也可输入为:wsl -l -o
。
列出已安装的 Linux 发行版
PowerShell复制
wsl --list --verbose
安装
windows准备
- 启用或关闭WINDOWS功能—>勾选3个选项:
- WINDOWS虚拟机监控程序平台;
- 虚拟机平台;
- 适用于LINUX的WINDOWS子系统;
- 打开PowerShell(以管理员身份运行):
wsl --update wsl --shutdown wsl --set-default-version 2 //设置WSL2为默认;
- 选择合适的Linux镜像下载安装
WSL2备份和还原
在 Windows 子系统 Linux 2 (WSL2) 中备份和还原可以帮助你保存系统的状态和数据。下面是如何进行备份和还原的步骤:
备份 WSL2
- 停止 WSL2 实例:确保 WSL2 实例没有在运行。你可以在 PowerShell 或命令提示符中使用以下命令停止所有实例:
wsl --shutdown
- 导出 WSL2 实例:
- 使用
wsl --list --verbose
命令查看你的 WSL2 实例的名称。 - 使用以下命令导出实例:
wsl --export <发行版名称> <备份文件路径>
例如,如果你有一个名为
Ubuntu
的发行版,并希望将其备份到C:\WSL2\backup.tar
,可以运行:wsl --export Ubuntu C:\WSL2\backup.tar
- 使用
还原 WSL2
- 导入 WSL2 实例:
- 使用以下命令将备份文件导入到新的 WSL2 实例:
wsl --import <新发行版名称> <安装路径> <备份文件路径>
例如,如果你想将备份导入为一个新的发行版名为
RestoredUbuntu
,并将其安装到C:\WSL2\Restored
,可以运行:wsl --import RestoredUbuntu C:\WSL2\Restored C:\WSL2\backup.tar
- 使用以下命令将备份文件导入到新的 WSL2 实例:
wsl --import Ubuntu22.04 C:\WSL2\Ubuntu22.04 D:\Ubuntu-22.04-240802.tar\Ubuntu-22.04-240802.tar
- 检查和配置:
- 确保新导入的实例按预期工作。你可以启动 WSL2 实例并检查数据是否完整。
通过这些步骤,你可以方便地备份和还原 WSL2 实例。希望这能帮到你!
xfce4-GUI?
原生wsl只有命令行不支持GUI,这显然是不可接受的。 安装命令:
sudo apt update && sudo apt -y upgrade
sudo apt-get purge xrdp
sudo apt install -y xrdp
sudo apt install -y xfce4
sudo apt install -y xfce4-goodies
sudo cp /etc/xrdp/xrdp.ini /etc/xrdp/xrdp.ini.bak
sudo sed -i 's/3389/3389/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/max_bpp=32/#max_bpp=32\nmax_bpp=128/g' /etc/xrdp/xrdp.ini
sudo sed -i 's/xserverbpp=24/#xserverbpp=24\nxserverbpp=128/g' /etc/xrdp/xrdp.ini
echo xfce4-session > ~/.xsession
sudo nano /etc/xrdp/startwm.sh
!以下这两行注释掉:
#test -x /etc/X11/Xsession && exec /etc/X11/Xsession
#exec /bin/sh /etc/X11/Xsession
!添加这一行:
# xfce
startxfce4
启动!
nano ~/.bashrc
source ~/.bashrc
sudo /etc/init.d/xrdp start #加入
然后使用Windows远程桌面连接就可以了,ip address
查看地址。
交互权限
在 Windows Subsystem for Linux (WSL) 和 Windows 系统之间,权限交互涉及多个层面。以下是对 WSL 和 Windows 交互权限的详细解释:
1. WSL 访问 Windows 文件系统
1.1 文件系统路径
WSL 可以访问 Windows 文件系统,路径通常挂载在 /mnt
下。例如:
C:
盘在 WSL 中的路径为/mnt/c
D:
盘在 WSL 中的路径为/mnt/d
1.2 权限控制
- WSL 用户权限:在 WSL 中,用户权限基于 Linux 用户模型。普通用户和 root 用户权限不同,类似于标准 Linux 系统。
- Windows 文件系统权限:文件和目录的权限仍然由 Windows 的 NTFS 文件权限控制。例如,如果一个文件在 Windows 中设置为仅管理员可写,那么即使在 WSL 中以 root 用户运行,也无法写入该文件。
示例
假设在 Windows 中,C:\example\file.txt
的权限设置为只有管理员可写:
# 在 WSL 中查看该文件
cat /mnt/c/example/file.txt # 如果当前用户有读取权限,可以读取文件内容
# 尝试写入文件
echo "test" > /mnt/c/example/file.txt # 如果当前用户没有写入权限,则会失败
2. Windows 访问 WSL 文件系统
2.1 文件系统路径
Windows 可以通过文件资源管理器访问 WSL 文件系统,路径类似于:
\\wsl$\<DistroName>\
例如,访问名为 “Ubuntu-20.04” 的 WSL 发行版:
\\wsl$\Ubuntu-20.04\
2.2 权限控制
- Windows 用户权限:Windows 用户权限控制对 WSL 文件系统的访问。只有 Windows 用户拥有相应权限,才能访问和操作 WSL 文件系统中的文件。
- WSL 文件系统权限:WSL 文件系统(例如 ext4)具有 Linux 权限模型,包括文件所有者和权限位(读、写、执行)。Windows 用户访问 WSL 文件系统时,这些权限仍然生效。
示例
假设在 WSL 中,文件 /home/user/example.txt
的权限设置为仅所有者可写:
# 在 WSL 中设置文件权限
chmod 600 /home/user/example.txt
在 Windows 中通过文件资源管理器访问 \\wsl$\Ubuntu-20.04\home\user\example.txt
,如果当前 Windows 用户不匹配 WSL 文件的所有者,则无法写入该文件。
3. 交互权限的实际应用
3.1 从 WSL 运行 Windows 应用程序
在 WSL 中,可以通过以下命令运行 Windows 应用程序:
/mnt/c/Windows/System32/notepad.exe
WSL 用户权限决定了能否访问和运行该应用程序。
3.2 从 Windows 运行 WSL 命令
可以通过 Windows 命令提示符或 PowerShell 运行 WSL 命令:
wsl ls -la /home/user
执行这些命令时,WSL 中的命令将以配置的 WSL 用户权限运行。
4. 权限示例和冲突解决
示例 1:WSL 中的用户权限
# 在 WSL 中,以普通用户操作
touch /mnt/c/example.txt
# 可能会失败,因为普通用户可能没有在 C:\ 盘根目录创建文件的权限
示例 2:Windows 中的用户权限
# 在 Windows 中,以普通用户操作
echo "test" > \\wsl$\Ubuntu-20.04\home\user\example.txt
# 可能会失败,因为 Windows 用户可能没有对 WSL 文件系统中该文件的写入权限
权限冲突解决
确保在 Windows 和 WSL 中的用户权限匹配。例如,在 Windows 中使用管理员权限,在 WSL 中使用 root 用户权限,以确保最大权限覆盖。
磁盘空间
要确认 WSL 系统占用了多少磁盘空间,可以使用以下几种方法:
没用:
使用 du
命令查看 WSL 目录占用的磁盘空间
- 打开 WSL 终端。
- 运行以下命令查看整个文件系统的磁盘空间使用情况:
sudo du -sh /
- 如果只想查看特定目录(如用户主目录)的磁盘空间使用情况,可以运行以下命令:
sudo du -sh /home/your_username
使用
wsl --list --verbose
命令 - 打开 Windows 命令提示符或 PowerShell。
- 运行以下命令查看所有 WSL 发行版及其状态:
wsl --list --verbose
- 记下你要查看的发行版名称,然后运行以下命令查看该发行版的磁盘使用情况:
wsl --distribution <YourDistroName> --exec du -sh /
将
<YourDistroName>
替换为你的发行版名称。
假设你有一个名为 “Ubuntu-20.04” 的 WSL 发行版,以下是如何查看其磁盘使用情况的示例:
- 查看 WSL 发行版列表及其状态:
wsl --list --verbose
- 查看 “Ubuntu-20.04” 发行版的磁盘使用情况:
wsl --distribution Ubuntu-20.04 --exec du -sh /
通过这些方法,你可以确认 WSL 系统占用了多少磁盘空间,并根据需要进行管理和清理。 但是很长时间执行不下来且没有响应,还访问拒绝,如果不是忘加进度条就是卡死了
不知道有什么用:
方法 3:在 Windows 中查看 WSL 的磁盘使用情况
WSL 存储在 Windows 文件系统的特定位置,可以通过 Windows 的磁盘管理工具查看它的使用情况。
- 打开 Windows 文件资源管理器。
- 导航到以下路径(假设你使用的是 WSL2):
\\wsl$
- 找到你安装的 WSL 发行版,并检查其大小。 但是整体是0,分目录有大小,很奇怪的算法
有一点用:
方法 2:使用 df
命令查看文件系统的磁盘使用情况
- 打开 WSL 终端。
- 运行以下命令查看文件系统的磁盘使用情况:
df -h
这将显示所有挂载点的磁盘使用情况,包括根目录
/
和其他挂载点。 缺了点总结
文件究竟在哪
在 WSL(Windows Subsystem for Linux)中,文件系统和数据存储在一个虚拟磁盘文件中。这些虚拟磁盘文件是 VHD(Virtual Hard Disk)格式。以下是详细的解释和相关信息。
1. WSL 文件存储位置
WSL 1
对于 WSL 1,Linux 文件系统直接映射到 Windows 文件系统。因此,文件存储在 Windows 文件系统中的特定目录中。例如,WSL 1 的文件系统通常位于:
C:\Users\<YourUsername>\AppData\Local\Packages\<DistributionPackageName>\LocalState\
WSL 2
对于 WSL 2,文件系统存储在一个 VHD 文件中。WSL 2 使用一个轻量级的虚拟机,因此需要一个虚拟硬盘文件来存储其文件系统。
WSL 2 的 VHD 文件通常位于:
C:\Users\<YourUsername>\AppData\Local\Packages\<DistributionPackageName>\LocalState\ext4.vhdx
2. WSL 2 的虚拟磁盘文件
ext4.vhdx
在 WSL 2 中,ext4.vhdx
文件是一个虚拟硬盘文件,包含了 WSL 2 的完整文件系统。这意味着所有的 Linux 文件和目录,包括用户的 home 目录、系统目录和安装的软件,都存储在这个 VHDX 文件中。
3. 查看 WSL 2 的存储使用情况
你可以通过以下步骤查看 WSL 2 的存储使用情况:
使用 PowerShell 查看 WSL 2 虚拟磁盘
- 打开 PowerShell。
-
使用
wsl
命令查看 WSL 发行版列表及其状态:wsl --list --verbose
这将显示所有已安装的 WSL 发行版及其当前状态(WSL 1 或 WSL 2)。
-
找到你要查看的 WSL 发行版名称,然后检查虚拟磁盘文件的大小:
Get-ChildItem "C:\Users\<YourUsername>\AppData\Local\Packages\<DistributionPackageName>\LocalState\ext4.vhdx"
将
<YourUsername>
替换为你的 Windows 用户名,将<DistributionPackageName>
替换为你的 WSL 发行版的包名称。
使用 du
命令查看 WSL 文件系统使用情况
- 打开 WSL 终端。
-
使用
du
命令查看整个文件系统的磁盘空间使用情况:sudo du -sh /
这将显示根文件系统的总磁盘空间使用情况。
4. 调整 WSL 2 虚拟磁盘大小
如果你需要调整 WSL 2 虚拟磁盘的大小,可以使用以下步骤:
压缩虚拟磁盘
- 打开 PowerShell 并关闭所有 WSL 终端。
-
运行以下命令以压缩指定 WSL 发行版的虚拟磁盘:
wsl --shutdown Optimize-VHD -Path "C:\Users\<YourUsername>\AppData\Local\Packages\<DistributionPackageName>\LocalState\ext4.vhdx" -Mode Full
这将压缩虚拟磁盘文件,释放未使用的空间。
wsl2的ubuntu22.04中安装ros2
1、设置编码
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
2、hosts文件中添加域名解析
nano /etc/hosts
`199.232.96.133 raw.githubusercontent.com`
`199.232.96.133 raw.github.com`
3、设置软件源
sudo apt update && sudo apt install curl gnupg2 lsb-release
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros2-latest.list'
4、安装ros2安装包
sudo apt update
sudo apt install ros-humble-desktop
注意:
此处以Ubuntu22.04下安装ROS2 Humble为例,如使用Ubuntu 20.04,请将“humble”改为“foxy。
或者安装基础版
sudo apt install ros-humble-ros-base
apt-get update
5、然后我们还需要安装编译工具colcon
sudo apt install python3-colcon-common-extensions
6、设置环境变量
source /opt/ros/humble/setup.bash
7、安装自动补全工具
sudo apt install python3-argcomplete
8、验证
跑几个例程测试一下: 先运行一个talker:
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_cpp talker
再运行一个Listener
source /opt/ros/humble/setup.bash
ros2 run demo_nodes_py listener