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

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

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

这有什么特殊原因还是只是惯例?

答案1

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

  • 只有常规文件才有扩展名,目录或设备名称没有。仅仅作为目录或设备这一事实就足以指示文件类型。
  • 直接调用的可执行文件没有扩展名。对于用户来说,可执行的信息就足够了,内核不关心文件名。
  • 以全部大写的单词开头的文件通常是文本文件,例如README, TODO。有时还有一个附加部分表示子类别,例如INSTALL.linux, INSTALL.solaris
  • 名称以点开头的文件是特定应用程序的配置或状态文件,通常没有扩展名,例如.bashrc, .profile, .emacs
  • 有一些传统的情况,例如Makefile

(这些都是常见情况,并非硬性规定。)

大多数二进制文件格式还包含某种描述文件属性的标头,并且通常允许通过以下方式识别文件格式神奇的数字。这file命令查看此信息并向您显示其猜测。

有时文件扩展名提供的信息比文件格式更多,有时则相反。例如,许多文件格式包含压缩存档:Java 库(.jar)、OpenOffice 文档(.odt、 …)、Microsoft Office 文档(.docx、 …)等。另一个例子是源代码文件,其中扩展名表示编程语言,计算机很难从文件内容自动猜测。相反,某些扩展名非常不明确,例如.o用于编译的代码文件(目标文件),但检查文件内容通常很容易揭示目标文件适用的机器类型和操作系统。

该扩展的一个优点是识别它比打开文件并查找魔术序列要快得多。例如,shell 中文件名的完成几乎总是基于名称(主要是扩展名),因为读取大目录中的每个文件可能需要很长时间,而仅读取文件名对于按下来说就足够快了Tab

有时,当两个文件格式几乎但不完全相同时,更改文件的扩展名可以让您说明如何解释文件。例如,网络服务器可能会.shtml.html不同的方式对待前者,前者会经历一些服务器端预处理,后者按原样提供。

对于 gzip 存档,gzip不会重新压缩名称以 和一些其他扩展名结尾的.gz文件.tgz。这样你就可以运行gzip *压缩目录中的每个文件,并且已经压缩的文件不会被修改。

答案2

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

答案3

文件扩展名主要是系统用户的约定。有些工具确实使用文件扩展名来执行操作。例如,Nautilus 根据文件扩展名向我显示不同的图标。

如果我给你一个名为 的文件file,你可能不知道如何打开这个文件。但是,如果我给你一个名为file.tar.gz或者 的文件,file.tar你就可以快速轻松地找出它。

相关内容