我正在运行 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
它会变得非常沮丧。 ;)