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

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

是否可以在文件系统级别强制要求所有创建的文件条目都具有有效的 UTF-8 名称?我正在使用 Btrfs。

答案1

不可以。您要么必须修改 Linux 或文件系统实现,要么使用强制限制的直通过滤器文件系统(可能用 fuse 实现)。

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

  • 老派纯粹主义者会坚持认为文件名应该是任何以零结尾的字节字符串。
  • 其他人会说,如果您强制使用有效的 UTF-8,那么您还应该更进一步,禁止其他 Unicode 错误,例如组合没有基本字符的字符、未分配的代码点等等。

答案2

zfs 有一个utf8onlymount 选项这将强制执行这一点。

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

答案3

文件系统本身(以及 Linux 文件系统层)允许文件名中包含除 null 和 之外的任何字符/。理论上可以修改驱动程序以删除对此类名称的支持,但可能会产生不必要的副作用:例如,当您挂载已有此类文件的文件系统时会发生什么?它们是否不可见?您是否会引发内核恐慌?您是否在显示时转义了这些名称?如果您确实转义了这些名称,是否会破坏任何用户空间工具或使某些文件无法访问?[请参阅“rootkit”]。此外,分叉操作系统意味着您必须为每个内核更新手动重建并相应地应用补丁 - 有点烦人。

不过,如果你确实想继续下去,最简单的方法就是创建保险丝层。它确实会对性能产生不利影响,但毫无疑问这是开始和测试您的想法的最简单方法。您只需几个小时就可以阅读文档并编写这样的程序。

相关内容