如何禁止非UTF-8文件名?

是否有可能在文件系统级别执行所有创build的文件条目将具有有效的UTF-8名称? 我正在使用Btrfs。

不需要。您必须修改Linux或文件系统实现,或使用强制执行限制的传递filter文件系统(可能使用熔丝实现)。

这是一个好主意,但可能很难达成共识:

  • 老派纯粹主义者会坚持认为,一个文件名应该可以是任何以nul结尾的字节串。
  • 其他人会说,如果你强制使用UTF-8,你还应该进一步禁止其他的Unicode错误,比如组合无字符的字符,未分配的代码点等等。

zfs有一个utf8only挂载选项 ,将强制执行此操作。

有一个补丁将其添加到ext4,但似乎没有得到太多的回应。

文件系统本身(以及扩展linux文件系统层)允许除null和/以外的文件名中的任何字符。 修改驱动程序以取消对这些名称的支持在理论上是可行的,但可能会产生不必要的副作用:例如,当您装载已具有此类文件的文件系统时会发生什么情况? 他们是隐形的吗? 你有内核恐慌吗? 你摆脱这些名字显示? 如果你确实逃避了这些名字,是否会破坏任何用户级工具或者使某些文件无法访问? [请参阅“rootkit”]。 此外,分叉操作系统意味着你必须手动重build每个内核更新,并相应地应用你的补丁 – 有点烦人。

但是,如果您想继续操作,最简单的方法就是创buildFUSE图层。 这对性能产生不利影响,但肯定是开始testing您的想法的最简单的方法。 你可以阅读文档,并在几个小时内编写这样的程序。