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_UNIX
或AF_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 套接字。