在昨天之前,我只使用小写字母、数字、点(.)和下划线(_)来命名目录和文件。
今天我想开始使用更多特殊字符。哪些是安全的(安全的意思是我永远不会遇到任何问题)?
附言:我不敢相信这个问题还没有在这个网站上被问到,但是我搜索了“命名”这个词,并阅读了典型问题但没有成功(大多数是关于计算机名称的)。
编辑#1:(顺便说一句,我不使用大写字母作为文件名。我不记得为什么。但从几个月前开始,我在使用大写字母时就遇到了生产问题:有些操作系统不支持 ascii!
以下是昨天工作时发生的事情:像往常一样,我必须创建一个自签名 SSL 证书。像往常一样,我使用网站的名称作为文件的名称:www2.example.com.key www2.example.com.crt www2.example.com.csr。
然后问题来了:生成一个通配符自签名证书。我这样做了,并将文件命名为 example.com.key example.com.crt example.com.csr,这很容易让人误解(它是 *.example.com 的证书)。
我回到家,开始在 apache 配置文件的文件名中添加一些星号,看看它是否有效(在一台没用的家用电脑上,甚至没有停滞)。
文件名中的星号确实让我害怕:一些同事/供应商/……可以使用 rm find xarg 执行一些脚本,这将导致http://www.ucs.cam.ac.uk/support/unix-support/misc/horror,已经有一个答案谈到了灾难。
编辑#2:
只是觉得:不需要转义。有人知道为什么不在文件名中使用它吗?
编辑#3:
让我们总结一下我目前所理解的内容:
- .并且_可以安全地用作文件名。
- | ( *应避免使用需要转义的特殊字符(例如空格)。
- 由于各种原因,应避免使用其他一些特殊字符(/ - :)
那么其他的呢,比如%或=?
答案1
听起来像是灾难的根源。
您可以使用除/- 之外的任何内容,但您可能需要用单引号 ( ') 括起来以避免执行特殊字符。
例如。$*`\|
在文件名中使用特殊字符非常类似于 Windows-主义- 主要取自 GUI 机器管理与命令行(这不适合不断地转义文件名)。
最安全的方法就是坚持a-zA-Z0-9_.
答案2
在 UNIX 中,您可以使用除“/”之外的任何字符,因为它用于分隔目录名称。Unicode 字符也可以。
答案3
虽然安东尼奥是正确的,但我的建议是不要改变你的命名风格,除非可能添加大写字母(但如果其他操作系统加入进来,即使这样也可能会产生歧义)。
这将为您省去很多可能遇到的问题,例如$在 shell 命令中可能需要转义的语言环境和特殊字符(例如空格或符号)。
答案4
:通常不用于文件名,因为 Windows 会拒绝读取此类文件。它对名称有更多限制,尤其是用作:设备分隔符,而 Unix 不需要单一文件系统层次结构。