什么字符可以安全地用于在UNIX / Linux上命名文件?

在昨天之前,我只使用小写字母,数字,点( )和下划线( _ )作为目录和文件命名。

今天我想开始使用更多的特殊字符。 哪些是安全的 (通过安全我的意思是我永远不会有任何问题)?

ps:我不能相信这个问题在这个网站上还没有被问到,但是我已经search了“命名”一词,并且没有成功地阅读规范问题(大部分是关于计算机名称的)。

编辑#1 :(顺便说一下,我没有使用大写字母作为文件名,我不记得为什么,但是几个月后,我遇到了大写字母的问题: 有些操作系统不支持ascii !)

以下是昨天在工作中发生的事情:像往常一样,我必须创build一个自签名的SSL证书。 像往常一样,我使用的网站名称的文件:www2.example.com.key www2.example.com.crt www2.example.com.csr。

然后出现问题:生成通配符自签名证书。 我这样做,并命名文件example.com.key example.com.crt example.com.csr,这是误导(这是一个* .example.com证书)。

我回到家里,开始在apacheconfiguration文件的文件名中join一些星星,看它是否有效(在一台没用的家用电脑上,甚至没有出现)。

文件名中的星星真的吓到我了:有些同事/供应商/ …可以使用rm查找xarg脚本,这会导致http://www.ucs.cam.ac.uk/support/unix-support/misc/恐怖 ,已经有一个答案谈到灾难。

编辑#2

只是想到不需要逃脱。 任何人都知道为什么它不用于文件名?

编辑#3

让我们总结一下我所了解的东西:

  • _在文件名中是安全的。
  • 需要转义的特殊字符(例如空格| * ))应该被避免。
  • 应该避免一些其他的特殊字符出于各种原因( / - :)

那么所有其他的,如=

听起来像一个灾难的秘诀。

您可以使用除/以外的任何内容,但您可能需要使用单引号( ' )来包装以避免执行特殊字符。

例如。 $ * ` \ |

在文件名中使用特殊字符是一个Windows主题 – 主要是从GUI机器pipe理与命令行(不适用于连续不得不转义文件名)中获取的。

最安全的方法就是坚持az AZ 0-9 _

在UNIX中,可以使用除“/”以外的任何字符,因为它将目录名称分开。 Unicode字符也很好。

虽然安东尼奥是正确的,我的build议是不要改变你的命名风格,除了可能添加大写字母(但即使是其他操作系统进入混合可以是ambigous)。

这样可以避免很多问题,否则可能需要在shell命令中使用可能需要转义的语言环境和特殊字符(如空格或$符号)。

通常不用于文件名,因为Windows会拒绝读取这样的文件。 它具有更多的名称限制,特别是使用作为设备分隔符,哪个Unix不需要具有单个文件系统层次结构。