探究:Linux为何不太在乎文件扩展名
您可能习惯了跟踪和修改文件名中的文件扩展名,尤其是如果您是在 Windows 环境下长大的。然而,Linux 对文件扩展名的使用方式不同,在某些情况下甚至完全忽略它们。那么这是怎么回事,扩展名到底重要吗?
大多数计算机系统,特别是 Windows,以这样或那样的方式使用文件扩展名。文件扩展名是文件名末尾的 2 - 4 个字母(有时是数字)的组合。对于网页可能是".html",对于 JPEG 图像可能是".jpg"等等。
有些系统对扩展名的要求非常严格,实际上是必须的。Linux 则更灵活,在许多情况下,并不真正关心文件扩展名。您可以随意将您的图像文件命名为"octopus.png"、"octopus.image",甚至只是"octopus"。
从历史上看,Linux 与 Windows 有所不同,它倾向于通过文件的内容而不是文件名来确定文件的类型。每种方法都有其自身的优点,所以不存在哪一种是正确的、错误的或者比另一种更好的情况。
在 Linux 系统中,查找文件类型的标准方式使用“魔数”、文本模式或原始字节,它们指示着特定的文件类型。例如,file 命令会打印文件的类型:
鉴于 Linux 处理文件类型的方式,您可以更改文件的扩展名,并且文件命令仍将识别其实际类型:
通常,无论您使用什么文件扩展名,应用程序仍能完美运行。您甚至可以完全删除文件扩展名而不会损坏文件,并且您一般不会有任何问题。当然,除非您确实遇到问题。
Linux 通常不太关注文件扩展名,但应用程序仍能随心所欲地运行。即使像 GNOME 的 Files(Nautilus)这类核心应用程序,也通过扩展名来判定文件类型。例如,这里有同一文件的两个副本,扩展名不同:
请注意,Files 将具有 JPG 扩展名的文件报告为 JPEG 类型,即便它实际上是 PNG 格式。这或许是因为使用文件扩展名效率更高。这种神奇的方法依赖于打开文件并读取一定数量的内容。检查文件名的速度要快得多,即便其准确性稍差。
某些文件类型更依赖扩展名。例如,XLSX 文件是一种压缩文件类型,因此扩展名很重要。如果没有它,像 xdg-open 这样的应用程序就无法满足您的期望。此示例使用名为 sample.xlsx 的 Excel 电子表格文件和名为 sample2 且没有扩展名的该文件的副本。
虽然文件命令将这两个文件都识别为 Microsoft Excel 类型,但 xdg-open 感到迷惑,并使用存档管理器打开没有扩展名的文件。请注意,文件也把它报告为“Zip 存档”。
需要牢记的是,使用文件扩展名还有其他不错的理由:
总之,虽说您或许无需使用文件扩展名,而且了解它们在 Linux 中的用途是有用的,但您大概还是应该使用它们,以免遇到任何麻烦。