Unix 文件命名约定

Unix 文件命名约定

我想知道 Unix 中文件的命名约定是什么?我对此不确定,但我认为也许应该遵循一种通用的命名约定?

例如,我想命名一个文件:backupwith part 2andrandom

我应该这样做:

backup_part2_random

或者

backup-part2-random

或者

backup.part2.random

我希望问题很清楚。基本上,我想选择一种符合Unix哲学的格式。

答案1

.用于分隔文件类型扩展名,例如foo.txt.

-or_用于分隔逻辑词,例如my-big-file.txtor 有时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
  • 结尾的 zvmlinuz意味着压缩,但我从未见过任何其他以这种方式命名的文件。

答案4

在unix中,文件名只是一个字符串,与DOS不同,DOS中的文件名由名称和扩展名组成。所以任何给定的文件名都是完全可以接受的。

但许多程序仍然使用以点开头的文件后缀来区分不同的文件类型,即 Apache Web Server 使用后缀在应答标头中设置正确的 MIME 类型。

相关内容