为什么 tar 和 gzip 文件通常有一个文件扩展名?

Mad*_*ist 8 filenames files

在 unices 上不需要文件扩展名,但我遇到的每个 tarred、gzipped 或 bzipped 文件都有一个文件扩展名,如.tar,.tar.gz.tgz.

有什么特殊原因吗,还是只是约定俗成?

Gil*_*il' 17

最初,在 unix 系统上,文件名的扩展名是一个约定问题。它们允许人类选择正确的程序来打开文件。现代惯例是在大多数情况下使用扩展;常见的例外是:

  • 只有常规文件有扩展名,没有目录或设备名称。仅仅作为目录或设备的事实就足以指示文件类型。
  • 旨在直接调用的可执行文件没有扩展名。对用户来说,可执行这一事实就足够了,内核并不关心文件名。
  • 以全部大写的单词开头的文件通常是文本文件,例如README, TODO. 有时还有一个附加部分表示一个子类别,例如INSTALL.linuxINSTALL.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 *压缩目录中的每个文件,并且不会修改已经压缩的文件。


小智 8

它们可能不需要扩展名,但它确实使在ls.

  • 确切地。通常`tar`没有“请握住我的手”标志,所以你必须告诉它你有什么样的档案。 (2认同)