在 Ubuntu/Windows11 双启动机器上创建文件名中包含管道字符(“|”)的文件

在 Ubuntu/Windows11 双启动机器上创建文件名中包含管道字符(“|”)的文件

我正在运行 Ubuntu 22.04,并且想要创建一个文件名中包含管道字符(“|”)的文件。 (需要运行一些遗留代码。)具体来说,如何识别和纠正阻止我在 Linux/Windows11 双启动系统的某些驱动器上执行此操作的陷阱?

我认为双启动是一个问题,因为我可以在我的计算机上的某些目录中成功创建这样的文件,但不能在 Windows 可以读取的磁盘驱动器上创建这样的文件(见下文)。其他人最初安装了操作系统,所以我不知道他们做出的哪些选择可能会影响这个问题。

这是我尝试过的。下面的尝试是有效的,所以我们知道 Linux 没有根本性的反对:

xname@blackbox:~$ cd ~
xname@blackbox:~$ touch "|"
xname@blackbox:~$ ls -l "|"
-rw-rw-r-- 1 xname xname 0 Feb  9 10:17 '|'

同样,如果我在目录中/media或在/media/xname目录中,我可以成功触摸该文件。

xname@blackbox:/media/xname$ cd /media
xname@blackbox:/media$ sudo touch "|"
xname@blackbox:/media$ cd /media/xname
xname@blackbox:/media/xname$ sudo touch "|"
xname@blackbox:/media/xname$ ls -l
total 12
-rw-rw-r-- 1 xname xname    0 Feb  9 11:35 '|'
drwxrwxrwx 1 xname xname 8192 Feb  8 17:25  cdisk
drwxrwxrwx 1 xname xname 4096 Feb  9 11:30  ddisk

您可以在上面看到权限ddisk。当我最初拿到机器时,它的父目录有一个 ACL,但我使用它删除了它setfacl -b ddisk,然后重新启动。

触摸尝试在ddisk( 和cdisk) 内失败:

xname@blackbox:/media/xname$ cd /media/xname/ddisk
xname@blackbox:/media/xname/ddisk$ touch "this_works_fine"
xname@blackbox:/media/xname/ddisk$ touch "|"
touch: setting times of '|': No such file or directory
xname@blackbox:/media/xname/ddisk$ sudo touch "|"
touch: setting times of '|': No such file or directory

也许命令的部分输出findmnt会有所帮助:

TARGET                                   SOURCE           FSTYPE  OPTIONS
/                                        /dev/nvme0n1p5   ext4    rw,relatime,er
├─/media/xname/ddisk                     /dev/nvme1n1p2   fuseblk rw,nosuid,node
└─/media/xname/cdisk                     /dev/nvme0n1p3   fuseblk rw,nosuid,node

这是输出mount | grep media

/dev/nvme0n1p3 on /media/xname/cdisk type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)
/dev/nvme1n1p2 on /media/xname/ddisk type fuseblk (rw,nosuid,nodev,relatime,user_id=0,group_id=0,default_permissions,allow_other,blksize=4096,uhelper=udisks2)

关于这台机器的另一个可能相关的令人费解的事情是:当我登录时,系统会要求我输入一个不是xname.我不知道从哪里来xname的。

感谢您的帮助。

答案1

这应该不重要哪个您使用的 DOS/Windows 特定文件系统;他们全部禁止使用以下字符(每这个MS页面) ....

使用当前代码页中的任何字符作为名称,包括 Unicode 字符和扩展字符集中的字符 (128–255),但以下情况除外:

以下保留字符:

  • < 小于
  • >(大于)
  • : (冒号)
  • “(双引号)
  • /(正斜杠)
  • \(反斜杠)
  • | (垂直管或棒)
  • ? (问号)
  • *(星号)

我怀疑是否有一个抽象层可以将这些内容提取出来,而不管文件系统如何,但我显然不是 MS 员工,也不确定。我猜想所有 Windows 文件系统都实现了该限制,并且这些文件系统的 linux 实现也遵循这些限制似乎是合乎逻辑的。我想如果你设法*hey|there在 Linux 上创建该文件,然后启动 Windows 并且它要运行,fsck它会变得非常沮丧。 ;)

相关内容