在 unices 上不需要文件扩展名,但我遇到的每个 tarred、gzipped 或 bzipped 文件都有一个文件扩展名,如.tar
,.tar.gz
或.tgz
.
有什么特殊原因吗,还是只是约定俗成?
Gil*_*il' 17
最初,在 unix 系统上,文件名的扩展名是一个约定问题。它们允许人类选择正确的程序来打开文件。现代惯例是在大多数情况下使用扩展;常见的例外是:
README
, TODO
. 有时还有一个附加部分表示一个子类别,例如INSTALL.linux
,INSTALL.solaris
。.bashrc
, .profile
, .emacs
.Makefile
。(这些是常见情况,不是硬性规定。)
大多数二进制文件格式还包含某种描述文件属性的标头,通常允许通过幻数识别文件格式。该file
命令查看此信息并向您显示其猜测。
有时文件扩展名比文件格式提供更多信息,有时则相反。例如,许多文件格式由zip存档组成:Java 库 ( .jar
)、OpenOffice 文档 ( .odt
, ...)、Microsoft Office 文档 ( .docx
, ...) 等。另一个例子是源代码文件,其中扩展名表示编程语言,它可以计算机很难从文件内容中自动猜测。相反,一些扩展名非常模糊,例如.o
用于编译的代码文件(目标文件),但检查文件内容通常很容易揭示目标文件的机器类型和操作系统。
该扩展程序的一个优点是识别它比打开文件并查找魔术序列要快得多。例如,shell 中文件名的补全几乎总是基于名称(主要是扩展名),因为读取大目录中的每个文件可能需要很长时间,而仅读取文件名就足够快了Tab。
有时,当两种文件格式几乎但不完全相同时,更改文件的扩展名可以让您说明如何解释文件。例如,Web 服务器可能会以不同的方式对待.shtml
和.html
,前者进行一些服务器端预处理,后者按原样提供。
采用gzip档案的情况下,gzip
不会再压缩文件以谁的名义结束.gz
,.tgz
以及一些其他的扩展。这样你就可以运行gzip *
压缩目录中的每个文件,并且不会修改已经压缩的文件。