如何访问从 Windows 传输到 WSL-2 Ubuntu 的文件?

How can I get access to files transferred from Windows to WSL-2 Ubuntu?

我的 Windows 机器上安装了 Linux 子系统。我已经传输了一个 tar.gz 文件,我想通过找到我的子系统的位置并将文件拖到上面来访问。但是当我 运行 命令时:

tar -zxvf file_name.tar.gz

我收到错误:

tar (child): vmd-1.9.4a51.bin.LINUXAMD64-CUDA102-OptiX650-OSPRay185.opengl.tar.gz: Cannot open: Permission denied
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now

我假设权限被拒绝与从 Windows 转移有关,因为我也无法访问通过 Windows 创建的目录。那么,是否需要更改某些内容才能访问这些文件?

(PS。我知道除了从 Windows 传输文件外,还有其他获取 tar.gz 文件的方法,但我也需要对其他文件夹执行此操作,我仅包含相关的文件类型。)

编辑:您不应尝试将文件拖过来。请参阅下面的答案。

对于初学者来说,这属于 Super User,因为它不直接处理编程问题。但是由于您已经在这里提供了一个可能有点危险的答案(甚至在您的问题中),我不想让其他人无意中找到这个未回答的问题。

如果您使用了 link 中的第一种方法,则您使用的是 WSL1 实例,而不是 WSL2。只有 WSL1 使文件系统以这种方式可用。这是一个 really, really bad idea:

There is one hard-and-fast rule when it comes to WSL on Windows:

DO NOT, under ANY circumstances, access, create, and/or modify Linux files inside of your %LOCALAPPDATA% folder using Windows apps, tools, scripts, consoles, etc.

Opening files using some Windows tools may read-lock the opened files and/or folders, preventing updates to file contents and/or metadata, essentially resulting in corrupted files/folders.

我猜你可能已经完成了 WSL2 的安装过程,但是你在设置 wsl --set-default-version 2 或类似的东西之前安装了你的发行版。

正如您在上面的 Microsoft link 中看到的那样,现在有一种在 Windows 和 WSL 之间传输和编辑文件的安全方法 - \wsl$\ tmpfs 挂载。请注意,作为存储在内存中的 tmpfs 挂载,它实际上更多的是用于传输文件。当您重新启动或关闭 WSL 时,它们将消失。

但即使您使用了那篇文章中的第二种方法 (/mnt/c),您也可能会 运行 遇到权限问题。如果这样做,解决方案应该是按照我描述的 here.

使用 uid/gid 重新安装 C: 驱动器