Linux通过文件头中的代码来确定文件类型。它不依赖于文件扩展名来确定使用哪个软件打开文件。
这是我从教育中记得的,请在我错了的情况下纠正我!
这些扩展名只是为人类而设吗?
是的,但有一个例外。
当您与其他依赖于扩展名的操作系统进行交互时,使用这些扩展名是更明智的选择。
在Windows中,打开软件与扩展名相关联。
在Windows中,打开名为"file"的文本文件比打开同名为"file.txt"的文件要困难(每次都需要将文件打开对话框从*.txt切换到*.*)。对于制表符和分号分隔的文本文件也是如此。导入和导出电子邮件(.mbox扩展名)也是如此。
特别是在编写软件时。打开名为"software1"的HTML文件和名为"software2"的JavaScript文件比打开名为"software.html"和"software.js"的文件更困难。
如果Linux中有一个系统,文件扩展名很重要,我会称之为一个错误。当软件依赖于文件扩展名时,这是可以被利用的。我们使用
解释器指令来识别文件的类型(文件的前两个字节可以是字符“#!”,构成一个魔术数字(十六进制23和21,即“#”和“!”的ASCII值),通常称为shebang)。
文件扩展名最著名的问题是Windows上的
LOVE-LETTER-FOR-YOU.TXT.vbs。这是一个Visual Basic脚本,在文件资源管理器中显示为文本文件。
在Ubuntu中,当您从Nautilus启动一个文件时,会收到一个关于它将要执行的操作的警告。从Nautilus执行一个脚本,它想要启动一些软件,并且应该打开gEdit,显然是一个问题,我们会收到一个警告。
在命令行中,当您执行某个命令时,您可以直观地看到文件的扩展名。如果以.vbs结尾,我会开始怀疑(并不是说.vbs在Linux上可执行。至少不是那么容易;))。
gzip
,bzip2
,xz
等等。这些程序使用后缀来区分文件的压缩版本和替换的未压缩版本。尽管文件实际上是应该处理的压缩文件类型,但压缩程序经常会抱怨后缀不正确。 - Baard Kopperudfoo.c
(源代码)->foo.s
(汇编器)->foo.o
(单独编译的输出)->foo
(链接输出)。在这种情况下,文件扩展名是必要的,以便不同的格式有不同的名称,满足内核级别的要求,即给定的文件名只与一个字节流相关联。 - Jonathan Cast