文本文件使用哪个扩展名?(Unix / Linux)


20

我注意到我可以阅读没有扩展名的文本文件.txt。怎么来的?我应该保存带有或不带有.txt扩展名的这些文件吗?

还有,.ini文件呢?我通常这样使用它们:config.ini,我应该在此处删除扩展名吗?

有关Linux如何处理文件扩展名的任何常规资源都将很有用。

Answers:


37

UNIX / Linux与Windows没有早期的DOS / CP / M传统。因此,扩展对于大多数UNIX实用程序和工具通常意义不大。

我通常使用仅命令行环境。在Linux下这种环境下的扩展并不是真正重要的事情,只是给操作员或用户带来方便。(我对KDE或GNOME的经验不足,无法知道他们的文件管理器如何处理扩展。)

但是这种便利通常很重要。如果config.ini确实是Microsoft标准的“ .ini”格式,我会让扩展名保持不变。普通的旧文本文件在Linux中通常不带扩展名,但这并不是所有程序配置文件都通用的。程序员通常可以决定这一点。

我想如果要强调“ .txt”不是配置文件或其他机器可读文档,则在Linux下非常有用。但是,在源代码发行版中,惯例是将此类文件命名为全大写而不加扩展名(例如,README,INSTALL,COPYING等)。

有一些标准和约定,但是没有什么阻止您命名任何您想要的东西,除非您与他人共享东西。

在Windows中,给文件命名.exe(通常是explorer.exe)向Shell 表示它是一个可执行文件。UNIX将这些知识构建到文件系统的权限中。如果设置了适当的x位(请参阅参考资料man chmod),则外壳程序和内核函数会将其识别为可执行文件(我相信)。除此之外,Linux不在乎,大多数shell不在乎,并且大多数程序会在文件中查找其“类型”。

当然,有一个不错的命令file可以分析文件并确定地告诉您文件的内容。我相信,如果它不能与任何已知类型的文件中的数据匹配,并且如果它仅包含可打印的ASCII / Unicode字符,那么它将假定其为文本文件。


下面的@Bruce Ediger是绝对正确的。在内核或文件系统级别,即Linux本身,没有任何内容强制或关心文件的内容需要与其名称或应理解的程序相匹配。这并不意味着无法创建Shell或启动器实用程序来基于文件名执行操作。


7
如果您在控制台中进行大量工作,它也很有用,因为命名精美的文件更容易与其他文件区分开。
lynxlynxlynx

9
您应该强调Linux文件名没有扩展名-包含它的文件名的“ .txt”部分只是一个子字符串。您还应该强调,内部文件组织(LF结束的字符串,CR-LF结束的字符串,固定大小的记录等)甚至与名称都不存在微弱的联系,也不知道通过名称了解与之相关的文件的“应用程序” 。
Bruce Ediger

2
我认为只有DOS下的FAT16 8.3目录条目才具有用于扩展名的单独的3字节字段。FAT32保持了8.3场的兼容性,但实际的“长文件名”是一个没有独立的扩展字段,拆分对多个目录条目(字符串fandecheng.com/personal/interests/ewindows/nuhelp/lfnspec.htm
LawrenceC

23

与Windows不同,在UNIX系统中,文件类型不是由扩展名决定的。文件扩展名是并且过去只是人类的视觉指示器。您可以命名JPEG foo.c并在Gimp中打开它。与Windows的另一个对比是,在UNIX系统上,您必须使用完整的文件名,而Windows经常会为您处理文件名(例如,仅运行explorervs explorer.exe)。在UNIX上foo.sh必须称为foo.sh,而不是简单地称为foo

按照惯例,人们倾向于使用一组通用的扩展名。这种做法虽然不必要,但可能对整个人类有益。


7
为+1This practice…is probably beneficial for humanity at large
乌尔里希·丹格尔

糟糕的是,包装的多样性有时会使正确的哑剧处理变得困难(例如,根据我的经验,在KDE中),尽管我不知道为什么程序不退回到检查魔术字节上。
lynxlynxlynx

3
因为没有“魔术”字节。这只是“所有已知文件类型的简写,这些文件类型都经过合理地充分记录和组织,可以高度确定地可靠地进行检测”。它对于文本或容器文件非常有效。对于任何原始或未知数据类型,它通常都会惨遭失败。
bahamat 2012年

1
@bahamat这不是一个字节,但是文件中有一部分通常称为“ 魔术数字 ”,用于定义文件包含的内容。这就是该file命令正在查看的内容。(例如,#!是sh脚本的魔术数字)
Izkata 2012年

1
就像我说的那样,@ lzkata是正确的:“已知的文件类型经过合理的充分记录和组织,可以高度确定地可靠地进行检测”。
bahamat 2012年

7

总的来说,我发现保持严格的,描述性的命名约定非常有帮助。在Unix中,您不需要扩展名,但是我保留它有两个原因:

1)如果Windows机器将读取该文件,则打开它比尝试找到“用...打开”要容易。

2)扩展名可以帮助用户(用户)确定文件的功能。在我们的实验室中:.txt =文本文件.sgi = irix编译二进制.linux = linux编译二进制

如果必须使用旧版的Unix机器(我们仍使用IRIX),请记住* nix机器中的回车符是不同的,如果尝试使用Windows回车符打开文件,程序可能会不满意。



3

有几个很好的答案。我想进一步回答原始问题的一部分:“有关Linux如何处理文件扩展名的任何常规资源都将很有用。”

可以注册扩展名,以便Linux始终使用某些程序打开某些扩展名。这个设施叫做 binfmt

binfmt_misc是Linux内核的一项功能,该功能允许识别任意可执行文件格式并将其传递给某些用户空间应用程序,例如模拟器和虚拟机。可执行格式是通过专用文件系统接口(类似于/ proc)注册的。基于Debian的发行版通过额外的binfmt-support软件包提供了功能。

每种格式在/ proc / sys / fs / binfmt_misc目录中都有一个对应的文件条目,可以读取该文件条目以获取有关给定文件格式的信息。


-2

.txt可以通过不同的应用程序打开。但重要的是它用于将文件分类为某种类型。您可以看到我们是否使用.html保存了同一文件,但该文件尝试在Internet Explorer中打开。相应地制作了应用程序以支持此类文件类型。如果在上面使用.html,则编译器将尝试在其中查找html属性并相应显示结果。与其他扩展名相同。.ini文件可以读取为文本,但扩展名将其分类为配置文件,因此编译器将其视为配置文件,而不是普通的文本文件,因为该文本文件仅是一组记录,并且不具有的特定功能。 ini.h因此您不想将ini的扩展名更改为text


6
在Windows上可能就是这种情况,但是(如其他答案所述),这与使用UN * X的操作系统无关。
Piskvor 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.