我所做工作的实例

我所做工作的实例

我有一个装有 WSL2 的 Windows 10。

每当我在 Linux 端创建符号链接时,我都希望它能够从 Windows 端看到(例如在装有 samba 的服务器中)。但我无法从 Windows 看到它。

我将非常感激任何帮助我在 Windows 端查看 Linux 符号链接的帮助

我所做工作的实例

在 Linux Bash 中,它可以工作

如果我创建一个名为的文件a/hello.txtb指向的符号链接a,我就可以cat b/hello.txt看到它:

mkdir test
cd test/
mkdir a
echo "Hello, world!" > a/hello.txt
ln -s a b
ls -l
# See b pointing to a in the output
cat b/hello.txt
# See the file's contents in the output

Linux 中的代码片段

在 gitbash 中,损坏

当我转到 Windows 端时,符号链接已损坏。

在 gitbash 中:

Windows gitbash 中的代码片段

在CMD中,损坏

在 CMD 中(UNC\\wsl$\Ubuntu-20.04安装在 中W:):

Windows cmd 中的代码片段

在文件资源管理器中,损坏

在 Windows 资源管理器中b显示为文件,而不是文件夹:

Windows 资源管理器 UNC

问题

我做错了什么?我该怎么做才能b在 Windows 端看到可浏览的文件夹?

PD:与 SO 中的这个(未解决的)问题相关:https://stackoverflow.com/questions/64489501/wsl2-linux-relative-symlinks-broken-when-accessed-from-windows-only-for-the- 该问题上个月已关闭并建议移至超级用户。

答案1

似乎无法使用以下语法从 Windows 访问 WSL(Linux)符号链接\\wsl$根据 GitHub 上的这个问题。该桥使用 9P 服务器,但似乎存在一个错误,导致其无法正常工作。

在某些情况下,将数据存储在 Windows 上并使用 Windows 符号链接,然后从 Linux 访问数据可能会有效。如果您的目标是从图形程序访问数据,那么您可能可以从 Linux 运行该程序。否则,您只需要观察该问题并查看何时修复。

答案2

似乎你可以挂载并使用符号链接,但不能通过 SMB。也不能在文件系统之间使用。无论如何,
请参阅GitHub 上的这篇文章

基本上,您可以使用直接绑定挂载(即C:\ <-> /mnt/c)而不是使用虚假网络\\wsl$ <-> /(或\\wsl.localhost\ <-> /)来使 WSL 更快,并使符号链接更好。然后,您可以从任一操作系统在两侧使用符号链接。不过,据我所知,符号链接源和目标必须位于同一文件系统上,这是有道理的,因为 Windows 尚未本机挂载 EXT4。

/mnt/c/folder/...使用上面链接中的方法。如果文件和符号链接的物理位置为aka ,则可以在 Windows 和 WSL 之间共享公共位置。C:\folder\...我会避免使用“特殊”的 Windows 文件夹,例如 OneDrive,因为它可能会有奇怪的行为。

如果您希望 Windows 文件在 WSL 上物理存在(因此文件系统之间有符号链接),那么可能可以使用 Windows 中 SMB 挂载的符号链接,并在 Linux 中使用相应的绑定挂载,但我还没有尝试过。

我唯一遇到的问题是,尽管我可以访问 \wsl$\mnt\home,但似乎相同的挂载方法无法提供C:\...通过\\wsl$\mnt\c\...(我被拒绝权限)的访问...我猜测这是由于应用于此机制背后的“假”SMB 共享的权限,因为 linux 文件权限是相同的。

目前我不认为这是一个真正的问题,但我不能说这对每个人来说都是 100% 没问题的。

也许这是因为,在 WSL 中,查看(现在已安装)时,/mnt/c我看到一堆“特殊”NTFS 文件,这些文件是乱码或“权限被拒绝”,而 Windows(讽刺的是)将这些孤立错误解释为整个文件夹内的错误,并放弃,而不是仅仅忽略“外语”中的数据,所以也许它只是“翻译中丢失了”。也许 Win11 版本的 WSL 有所不同?

答案3

我通过在 wsl 中创建符号链接,然后在 Windows 资源管理器中创建指向相同目标并使用相同名称的快捷方式来解决此缺点。快捷方式在 unix shell 中显示为名称,末尾带有 .lnk。结果是,当您在 explorer/cmd 或 bash 中引用它时,路径将变为相同。您只需要在资源管理器中查看或在 bash 中执行 ls 时忽略其他文件 - 如果我有一个名为 Documents.lnk 的快捷方式和一个名为 Documents 的符号链接,则在 bash 中 cd 到 Documents 有效,在资源管理器中双击 Documents 或在 cmd.exe 中 cd Document 都有效。

相关内容