XFS 文件系统中的所有非法字符是啥?
Posted
技术标签:
【中文标题】XFS 文件系统中的所有非法字符是啥?【英文标题】:What are all the illegal characters in the XFS filesystem?XFS 文件系统中的所有非法字符是什么? 【发布时间】:2010-10-13 16:39:21 【问题描述】:有人可以提供(或指向我的列表)XFS 文件系统中的所有非法字符吗?我正在编写一个需要清理文件名的应用程序。
编辑:
好的,所以 POSIX 文件系统应该允许除 NUL 字符、正斜杠和 '.' 之外的所有字符。和 '..' 文件名被保留。所有其他例外都是应用程序级别的。谢谢!
【问题讨论】:
合法字符列表不会更短吗? 如果您想清理文件名,您可能需要从文件名中删除一些其他合法字符,例如控制字符(除非是国际文件名的一部分)。 【参考方案1】:POSIX 文件系统(包括 XFS)允许文件名中的每个字符,但 NUL (0x00) 和正斜杠 (/; 0x2f) 除外。
NUL 标记 C 字符串的结尾;所以它不允许在文件名中。 /是目录分隔符,不允许使用。 以点开头的文件名 (.
; 0x2e) 被视为隐藏文件。这是用户空间,而不是内核或文件系统约定。
您可能要遵循一些约定 - 例如,UTF-8 文件名 - 在这种情况下,还有很多很多限制,包括使用哪种规范化形式。
现在,您可能还想禁止其他事情;处理各种奇怪字符的文件名并不好玩。我强烈建议使用白名单方法。
此外,在处理文件名时,请注意每个目录中的 ..
条目。您不想遍历它并允许任意路径。
来源:Single Unix Spec v. 3, §3.169,“组成名称的字符可以从除斜线字符和空字节之外的所有字符值的集合中选择。”
【讨论】:
那么禁止星号“*”是由操作系统决定的吗? 允许使用星号 (0x2a)。运行这个应该是一个;注意从 shell 中转义的反斜杠: touch foo*【参考方案2】:根据Wikipedia,除NUL 之外的任何字符在XFS 文件系统文件名中都是合法的。当然,POSIX 通常不允许在文件名中使用正斜杠 '/'
。除此之外,任何东西都应该是好的,包括国际字符。
【讨论】:
嗯...到目前为止看起来像 [/*"?]。那些字符是非 NUL ASCII 是的,我更新了我的答案。 '*' 和 '?'和 '"' 应该是合法的。只是不是 NUL 和 '/'。以上是关于XFS 文件系统中的所有非法字符是啥?的主要内容,如果未能解决你的问题,请参考以下文章