我似乎可以在 unix 中使用任何有效字符创建文件名。
touch \; &&
touch \\ &&
touch \" &&
touch $'\n' &&
touch $'\t' &&
touch $'\v' &&
touch $'\23' &&
touch $'\13' &&
echo "DONE!"
我发现唯一不起作用的字符是/
和NUL
:
touch /
touch $'\0'
是否还有其他无效或无法在文件名中使用的字符?
答案1
答案是:在类Unix系统中,文件名由以下组成:字节,而不是字符。至少从内核及其 API 的角度来看是这样。
类 Unix 内核通常对除\000
(ASCII: NUL) 和\057
(ASCII: 斜杠) 之外的任何字节值都是中立的。在Linux中,文件系统层没有其他限制,但某些FS驱动程序及其模式会导致某些名称被拒绝,通常是由于无法翻译。例如,无法UTF-8
在使用任何挂载的东西-o iocharset=utf8
(例如 typescifs
或vfat
)上创建无效的文件名。任何 DOS/Windows 兼容的 FS 都不允许您将 \134(ASCII:反斜杠)作为名称的一部分。或者该msdos
类型将应用有关 8.3 名称的 DOS 限制。
Ext3/ext4 未知有限制,但前面提到的\000
和\057
.