门当户对 – Linux的文件类型与打开程序

每个操作系统,都要处理大量的、各种类型的文件。这些文件的作用、所面临的任务要求各异,其内部的存储逻辑结构设计也各有不同。在使用文件时,必须选取恰当的应用程序打开文件,才能正确获取文件中存储的数据和信息。如应用程序选取不当,则会出现驴唇不对马嘴的现象,造成各种乱码及崩溃问题。如何将各种文件类型,与恰当的文件打开读取程序相关联,是任何操作系统中必须考虑的问题。这个问题又可以进一步细分为以下几个方面的问题:

  1. 各种文件类型如何描述?
  2. 各类应用程序如何描述?
  3. 文件类型与读取打开其的应用程序的关联机制如何设计?

以 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](https://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 类型的应用程序关联

      xdg-mime default evince.desktop application/pdf

reference:

  1. https://www.linuxidc.com/Linux/2011-09/42414.htm
  2. https://blog.csdn.net/absurd/article/details/1146066
  3. https://blog.csdn.net/seaship/article/details/86286572
  4. https://blog.csdn.net/linuxxed/article/details/78734832
  5. MIME (Debian Wiki)
  6. Linux MIME type (讲 Linux 下 MIME 一篇不错的文章)

发表评论

电子邮件地址不会被公开。 必填项已用*标注