我的电脑上运行着 2 个 wsl 发行版,Ubuntu 和 Kali Linux。我在 kali linux 系统上安装了一些程序和一些文件,我想通过 Ubuntu 发行版访问或编辑它们。我该怎么做?这些文件是否位于我可以通过 Ubuntu 访问的文件系统中的某个位置?
谢谢!任何帮助我都感激不尽。
答案1
这有点奇怪:
从 Windows 访问 WSL 文件很容易,并且内置于 WSL 中——只需使用\\wsl$\<distro>
驱动器共享即可。
从 WSL 访问 Windows 文件也很容易——只需使用/mnt/<drive_letter>
挂载点。
从另一个 WSL 实例访问一个 WSL 实例中的文件不是“内置的”,但可以通过在每个发行版中使用绑定挂载到共享的/mnt/wsl
tmpfs 挂载来实现。
只需在 Ubuntu 和 Kali 中执行以下命令:
echo "/ /mnt/wsl/instances/$WSL_DISTRO_NAME none defaults,bind,X-mount.mkdir 0 0" | sudo tee -a /etc/fstab
然后退出每个,wsl --shutdown
从 PowerShell 或 CMD 发出一个(--terminate
每个一个也足够了),然后重新启动。
/mnt/wsl/instances/<distroname>
现在,您将在各自的绑定安装中找到每个文件。1
它的工作原理是创建一个条目,该条目在启动实例时/etc/fstab
使用分发名称创建一个绑定挂载。如果不存在,则允许创建所需的父目录,类似于。/mnt/wsl/instances/$WSL_DISTRO_NAME
X-mount.mkdir
mount
mkdir -p
该/mnt/wsl
目录是tmpfs
自动的:
- WSL 首次启动时创建
- 适用于所有 WSL2 发行版
补充笔记:
1如果
/mnt/wsl/instances
执行此操作后为空或缺失,则你可能正在运行最新的 WSL 版本,其安装顺序发生了变化。请参阅超级用户回答中的选项 1.5寻求解决方法。请注意,这不适用于 WSL1 发行版
另请注意,此方法需要两个发行版都在运行。对于不需要运行第二个发行版的某些方法,请参阅我的旧方法这个超级用户的回答。即使第二个发行版没有运行,选项 2 和 3 都可以工作。
答案2
除了@NotTheDr01d的回答之外,我还需要考虑到 中可能定义了不同的自动挂载根/etc/wsl.conf
。 在我的例子中,我将其设置为/
,所以/mnt/c
实际上是/c
,并且/mnt/wsl
是/wsl
。
为了使@NotTheDr01d 提到的方法与任何自定义自动挂载点兼容,您可以使用以下命令:
# determine mountpoint
MNT_WSL=$(awk '/\/wsl tmpfs/{print $2}' /proc/mounts)
# config fstab
grep "${MNT_WSL}/${WSL_DISTRO_NAME}" /etc/fstab || echo "/ ${MNT_WSL}/${WSL_DISTRO_NAME} none defaults,bind,X-mount.mkdir 0 0" | sudo tee -a /etc/fstab
# mount for current instance
sudo mount ${MNT_WSL}/${WSL_DISTRO_NAME}