我想知道 Unix 中文件的命名约定是什么?我对此不确定,但我认为也许应该遵循一种通用的命名约定?
例如,我想命名一个文件:backup
with part 2
andrandom
我应该这样做:
backup_part2_random
或者
backup-part2-random
或者
backup.part2.random
我希望问题很清楚。基本上,我想选择一种符合Unix哲学的格式。
答案1
.
用于分隔文件类型扩展名,例如foo.txt
.
-
or_
用于分隔逻辑词,例如my-big-file.txt
or 有时my_big_file.txt
。 -
更好,因为您不必按 Shift 键(至少使用标准的美国英语 PC 键盘),其他人则更喜欢,_
因为它看起来更像一个空格。
所以如果我理解你的例子,backup-part2-random
或者backup_part2_random
最接近正常的 Unix 约定。
Linux/Unix 系统上通常不使用 CamelCase。查看/bin
和中的文件名/usr/bin
。 CamelCase 是 Unix 和 Linux 系统上的例外而不是规则。
(NetworkManager
这是我能想到的唯一使用 CamelCase 的示例,它是由 Mac 开发人员编写的。许多人抱怨这个名称的选择。在 Ubuntu 上,他们实际上已将脚本重命名为network-manager
。)
例如,在/usr/bin
我的系统上:
$ ls -d [A-Z]* | wc -w # files starting with a capital
6
$ ls -d *_* | wc -w # files containing an underscore
178
$ ls -d *-* | wc -w # files containing a minus/dash
409
即便如此,所有以大写字母开头的文件都不会使用 CamelCase:
$ ls -d [A-Z]*
GET HEAD POST X11 Xvnc Xvnc4
答案2
远的更重要的是特定约定保持一致。选择一种风格,并坚持下去。
答案3
我对 Unix/Linux 文件名约定的看法:
Unix/Linux 文件系统本质上并不支持扩展的概念。文件扩展名的概念完全作为实用程序(例如 、 或您正在使用的 shell)支持的东西而
cp
存在ls
。我相信 NTFS 上也是如此,但我可能是错的。可执行文件(包括 shell 脚本)通常不具有任何类型的扩展名。脚本将有一个 hashbang 行(即
#!/bin/bash
)来标识哪个程序应该解释它。- 任何两个字母长的可执行文件都非常重要。因此,不要将可执行文件命名为两个字母的文件名。任何以
/etc
结尾的文件tab
也非常重要,例如fstab
,mtab
,inittab
. - 有时
.d
附加到目录名称中,特别是在 中/etc
,但这并不普遍(更新:https://serverfault.com/questions/240181/what-does-the-suffix-d-mean-in-linux) rc
广泛用于配置脚本或文件,前置(例如,rc.local
)或后缀(.vimrc
)- Unix/Linux 社区从来没有对扩展名有三个字符的限制,并且不赞成缩短众所周知的扩展名以适应。例如,不要
.htm
在 Unix/Linux 上的 HTML 文件末尾使用,而使用.html
. - 在一组文件中,文件名有时大写或全部大写,因此它出现在目录列表的开头。经典的例子
Makefile
在源码包中。仅对诸如 之类的东西执行此操作README
。 ~
用于标识备份文件或目录,如important_stuff~
、 或中/etc~
。许多 shell 将单独扩展~
为$HOME
。- 库文件几乎总是以
lib
.例外的是zlib
,可能还有其他一些。 - 由 inetd 调用的脚本有时会带有前导标记
in.
,例如in.tftpd
。 - 结尾的 z
vmlinuz
意味着压缩,但我从未见过任何其他以这种方式命名的文件。
答案4
在unix中,文件名只是一个字符串,与DOS不同,DOS中的文件名由名称和扩展名组成。所以任何给定的文件名都是完全可以接受的。
但许多程序仍然使用以点开头的文件后缀来区分不同的文件类型,即 Apache Web Server 使用后缀在应答标头中设置正确的 MIME 类型。