Bash 创建具有保留名称的文件

Bash 创建具有保留名称的文件,bash,windows-subsystem-for-linux,Bash,Windows Subsystem For Linux,Windows不允许您为文件指定保留名称,例如con。然而,WSL没有设置任何此类限制 创建名为con的文件会产生错误:“指定的设备名称无效。”创建一个带有 touch con 在WSL中不会产生任何错误,但从Windows资源管理器中删除它会产生错误:“无效的文件句柄。” rm con 在WSL中,删除它时不会出现问题 这是怎么回事?为什么WSL使用保留名称创建一个没有错误的文件?Windows会阻止这些文件名完全使用它们。(例如,如果您在旧Windows版本中访问了目录C:\CON\CO

Windows不允许您为文件指定保留名称,例如
con
。然而,WSL没有设置任何此类限制

创建名为
con
的文件会产生错误:“指定的设备名称无效。”创建一个带有

touch con
在WSL中不会产生任何错误,但从Windows资源管理器中删除它会产生错误:“无效的文件句柄。”

rm con
在WSL中,删除它时不会出现问题


这是怎么回事?为什么WSL使用保留名称创建一个没有错误的文件?

Windows会阻止这些文件名完全使用它们。(例如,如果您在旧Windows版本中访问了目录
C:\CON\CON
,则会出现蓝屏)

因此,您不能使用cmd或explorer访问/创建/删除它们(在哪个驱动器中并不重要)


但是,文件系统不会阻止它。正因为如此,linux(可能是因为某些东西在Windows内核中运行?)像git bash或wsl(我没有测试cygwin)这样的shell模拟器甚至可以在可引导的Windows分区中创建/访问/删除这些文件。

Windows完全阻止这些文件名的使用。(例如,如果您在旧windows版本中访问了目录
C:\CON\CON
,则会出现蓝屏)

因此,您不能使用cmd或explorer访问/创建/删除它们(在哪个驱动器中并不重要)


但是,文件系统并没有阻止它。因为linux(可能是因为某些东西在Windows内核中运行?)像git bash或wsl这样的shell模拟器(我没有测试cygwin)即使在可引导的Windows分区中也可以创建/访问/删除这些文件。

我不使用WSL,但是:
con
在Windows中对应于
/dev/console
在Linux中。我认为Windows内核中没有什么东西可以阻止使用此名称的文件,但是Windows资源管理器和
cmd
似乎阻止了这一点。相同的应用程序比如说,Cygwin的谎言:Cygwin工具也允许我创建一个
con
文件。由字母和冒号组成的文件名如何,比如
K:
。你能用WSL创建这个文件吗?关于K:,是的,你可以在WSL的目录中创建这样的文件,但你不能在mount point/mnt/c(即drvfs)中创建这样的文件。为什么?因为Linux文件名中唯一不允许的是斜杠和空。我不使用WSL,但是:
con
在Windows中对应于
/dev/console
在Linux中。我不认为Windows内核中有什么东西可以阻止使用此名称的文件,但是Windows资源管理器和
cmd
似乎阻止了这一点。同样适用于,比如说,Cygwin:Cygwin工具也允许我创建一个
con
文件。由字母和冒号组成的文件名如何,例如
K:
。您可以使用WSL创建它吗?关于K:,是的,您可以在WSL的目录中创建这样的文件,但您不能在mount point/mnt/c(即drvfs)中创建这样的文件.为什么?因为Linux文件名中唯一不允许的是斜杠和null。