每个操作系统,都要处理大量的、各种类型的文件。这些文件的作用、所面临的任务要求各异,其内部的存储逻辑结构设计也各有不同。在使用文件时,必须选取恰当的应用程序打开文件,才能正确获取文件中存储的数据和信息。如应用程序选取不当,则会出现驴唇不对马嘴的现象,造成各种乱码及崩溃问题。如何将各种文件类型,与恰当的文件打开读取程序相关联,是任何操作系统中必须考虑的问题。这个问题又可以进一步细分为以下几个方面的问题:
- 各种文件类型如何描述?
- 各类应用程序如何描述?
- 文件类型与读取打开其的应用程序的关联机制如何设计?
以 Linux 系统为例,阐述文件类型与应用程序的关联设计。
文件类型描述
现代操作系统,尤其是桌面系统,都使用 MIME结构 来描述一个文件的所属类型,Linux 也不例外。在 Linux 中,这些文件类型由 mimetype(.xml) 描述,具体信息存放在
- 全局:/usr/share/mime
- 局部:~/.local/share/mime
目录中。在该目录下,一般会有以下文件:
目录名 | 说明 |
---|---|
aliases | 文件类型的别名。比如 application/pdf 有时也称为 application/x-pdf |
magic | 文件类型的“魔数”。各种文件的内部标识,用于从文件内容来判断文件类型。如 BMP 图片文件以 BM 开头 |
globs | 扩展名与文件类型的对应关系。如 *.cpp 文件是 text/x-c++src 类型的 |
packages | 用于安装新文件类型用 |
应用程序描述
Linux 系统中,应用程序使用 Desktop entry (.desktop) 描述,具体信息存放在
- 全局:/usr/share/applications
- 局部:~/.local/share/applications
两个目录下有众多 desktop 文件,每一个 desktop 文件,即描述一个特定的应用程序。
文件类型与应用程序的关联机制
Linux 系统中,通过 .list 配置文件将文件类型(MIME)与应用程序关联(.desktop)关联起来,系统中有许多 .list 配置文件,存放在
- 全局:/usr/share/application/default.list
- 全局:/etc/gnome/default.list
- 局部:~/.local/share/applictions/default.list
- 局部:~/.local/share/applications/mimeapps.list
- 局部:~/.config/mimeapps.list
如果我们期望修改文件类型与应用程序的关联关系,尤其是在利用桌面系统时,设置某类特定文件的默认打开方式时,可直接修改特定的 .list 文件,即可达到期望效果。
除了 .list 文件外,还有 .cache 文件记录着关联信息,这些文件存放在:
- 全局:/usr/share/applications/mimeinfo.cache
- 局部:~/.local/share/applications/mimeinfo.cache
这些文件虽然也有文件类型与应用程序的关联信息,但是正如其文件名字所言,它们是”缓存文件”。所以一段时间后会刷新,更改也不起作用,但可以用于关联信息的查看。
关联机制的工具支持体系
Linux 系统通过上述方式,完成了文件类型与打开方式的关联。此外,围绕文件类型与打开方式的关联机制,Linux 也提供了对应的工具体系进行支持 — xdg 工具集。
xdg,全称 X Desktop Group,现改名为 freedesktop.org,
freedesktop.org (fd.o) is a project to work on interoperability and shared base
technology for free software desktop environments for the X Window System (X11)
on Linux and other Unix-like operating systems.(wikipedia)
1) xdg-open
xdg-open – opens a file or URL in the user’s preferred application
xdg-open,顾名思义,该程序负责根据关联的程序(或链接)打开文件。xdg-open先判断文件类型,然后到
- /usr/share/applications/defaults.list
- ~/.local/share/applications/defaults.list
找到指定的.desktop,并根据其中的命令打开应用程序。
2) xdg-mime
xdg-mime – command line tool for querying information about file type handling and adding descriptions for new file types
xdg-mime,该程序主要负责处理 mime 相关信息。
- 查询
- 文件的 mime 类型
xdg-mime query filetype a.pdf
- mime 类型对应的应用程序关联
xdg-mime query default application/pdf
- 文件的 mime 类型
- 修改
- mime 类型的应用程序关联
xdg-mime default evince.desktop application/pdf
- mime 类型的应用程序关联