为什么我的软件无法在 Ubuntu 20 子系统上的主文件夹之外创建套接字文件?

为什么我的软件无法在 Ubuntu 20 子系统上的主文件夹之外创建套接字文件?

get.ipc我在 Ubuntu 20 子系统上运行一些软件,这些软件在主目录中创建了一些数据文件和套接字文件:

在此处输入图片描述

但是,如果我使用另一个数据位置运行该软件/mnt/i,例如,I:另一个 NTFS 卷在哪里,该软件会创建其数据文件,但无法创建显示错误消息的“get.ipc”文件

Fatal: Error starting protocol stack: listen unix /mnt/i/.ethereum/geth.ipc: bind: invalid argument

/mnt/c得到了相同的结果。

C:\Users\D-Ef\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu20.04onWindows_79rhkp1fndgsc\LocalState\rootfs\home\def主文件夹(即)和文件夹之间有什么区别I:

例如,主文件夹是否可能具有一些允许创建套接字文件的特殊权限?如何检查?

/mnt/i/.ethereum我尝试使用如下命令从我的主目录创建一个符号链接

ln -s /mnt/i/.eth/ /home/def/.eth

但这没有帮助。

LocalState具有以下附加权限,但不清楚它是什么:

在此处输入图片描述

答案1

您尝试创建的文件类型称为 Unix 套接字(类型AF_UNIXAF_LOCAL)。这是位于文件系统中的套接字。

WSL 支持 Unix 套接字。它必须支持,因为许多 Linux 程序都需要它们才能工作。Windows,从最近的版本开始,支持Unix套接字。但是,这两种类型不兼容。

如果您将 Unix 套接字与 WSL 程序一起使用,则需要在 Linux 文件系统区域中创建它。这意味着它不应该位于 下/mnt/<drive>。如果您将 Unix 套接字与 Windows 程序一起使用,则该 Windows 程序应该在 WSL 区域之外创建它。

不同之处在于 WSL 使用的 Linux 文件系统区域支持正确的 POSIX 语义:区分大小写、任意字节文件名、Unix 套接字、POSIX 权限、悬空符号链接等。Windows 使用的标准 NTFS 区域不支持这些内容,因此不能用于存储 WSL 创建和使用的 Unix 套接字。WSL 中指定的所有驱动器/mnt/<drive>都是 Windows 驱动器,因此不适合 WSL Unix 套接字。

相关内容