Ubuntu 或任何其他 Linux 系统如何存储文件关联?
有某些/etc/asscociations
文件或者什么东西吗?
我知道我可以右键单击文件并通过“打开方式”进行更改,但我只是好奇想知道它在内部是如何存储的。
答案1
文件管理器(默认为 Nautilus)使用MIME 类型确定使用哪个程序打开文件。安装应用程序时,它可以指定可以打开的 MIME 类型以及用于打开 .desktop 文件中文件的命令/usr/share/applications
。该文件用于菜单、桌面快捷方式等。
例如,GIMP 有以下 .desktop 文件:
[Desktop Entry]
Version=1.0
Type=Application
Name=GNU Image Manipulation Program
GenericName=Image Editor
Comment=Create images and edit photographs
Exec=gimp-2.7 %U
TryExec=gimp-2.7
Icon=gimp
Terminal=false
Categories=Graphics;2DGraphics;RasterGraphics;GTK;
X-GNOME-Bugzilla-Bugzilla=GNOME
X-GNOME-Bugzilla-Product=GIMP
X-GNOME-Bugzilla-Component=General
X-GNOME-Bugzilla-Version=2.7.2
X-GNOME-Bugzilla-OtherBinaries=gimp-2.7
StartupNotify=true
MimeType=application/postscript;application/pdf;image/bmp;image/g3fax;image/gif;image/x-fits;image/pcx;image/x-portable-anymap;image/x-portable-bitmap;image/x-portable-graymap;image/x-portable-pixmap;image/x-psd;image/x-sgi;image/x-tga;image/x-xbitmap;image/x-xwindowdump;image/x-xcf;image/x-compressed-xcf;image/tiff;image/jpeg;image/x-psp;image/png;image/x-icon;image/x-xpixmap;image/svg+xml;application/pdf;image/x-wmf;image/jp2;image/jpeg2000;image/jpx;image/x-xcursor;
查看MimeType
字段 - 列出了支持的 MIME 类型。该Exec
字段告诉系统使用命令gimp-2.7 %U
,将“%U”替换为要打开的文件。(注意:GIMP 2.7 是我从 PPA 安装的版本,因此高于 Ubuntu 存储库中的当前版本)。
安装应用程序包时,系统会将此 MIME 类型数据提取到更易于访问的数据库中,因为如果每次打开文件时都查找每个 .desktop 文件,则会花费太长时间。
这告诉系统哪些应用程序能用于该 MIME 类型,并在“打开方式”列表中提供应用程序。默认值在其他地方定义。该文件/usr/share/applications/defaults.list
提供系统默认值的信息。除非您另有选择,否则这些是您“打开”文件时使用的应用程序。
答案2
为了补充 dv3500ea 的出色回答,我想添加一些有关更改关联时会发生什么情况的信息。
虽然 defaults.list(您可以通过输入“locate defaults.list”找到)提供了与每种 MIME 类型关联的应用程序列表,但您进行的任何自定义都存储在主目录中,即 ~/.local/share/applications/mimeapps.list。因此,如果您添加或删除关联,或者更改默认关联,此文件也会更新。
GNOME 桌面系统管理指南http://library.gnome.org/admin/system-admin-guide/stable/似乎没有讨论 mimeapps.list,但我在以下位置找到了以下描述http://live.gnome.org/SysAdminGuideUpdate:
mimeapps.list 位于 $XDG_DATA_DIRS/applications。其用途是添加或删除应用程序的 mime 关联。当用户在“打开方式”对话框中进行更改时,nautilus 会写入 ~/.local/share/applications/mimeapps.list。
答案3
我发现在我的系统 (Debian Jessie) 上也有一个~/.config/mimeapps.list
与我意外创建的使用 gedit 打开特定文件类型的关联。没有一种标准方法可以纠正这个问题(默认应用程序设置、Thunar 的打开用我用的是 .edit 属性,但是没有找到对应的文件,所以用 ...
我能够删除该行~/.config/mimeapps.list
,现在正确的应用程序可以打开该文件。
答案4
在 Ubuntu 18.04 上,我发现优先顺序如下,从强到弱:
~/.local/share/applications/defaults.list
/usr/share/applications/defaults.list
~/.config/mimeapps.list
(“使用其他应用程序打开”将更新此内容)- 看Alex Martian 的评论以下;#2 和 #3 可能顺序错误。
~/.local/share/applications/mimeapps.list
mimeinfo.cache
兼容应用程序注册表中遇到的第一个匹配项,这些匹配项是从和.desktop
中的文件生成的,可以使用 重新生成/usr/share/applications
/usr/local/share/applications
update-desktop-database
。- (没用过)
/etc/gnome/defaults.list