文件关联存储在哪里?

Ubuntu或任何其他Linux系统如何存储文件关联?

是否有一些/etc/asscociations文件或什么?

我知道我可以右键单击文件并通过“打开方式”进行更改,但我只是想知道它是如何在内部存储的。

文件管理器(默认情况下为Nautilus)使用文件的MIME类型来确定要打开它的程序。 安装应用程序时,它可以指定可以打开的MIME类型以及用于打开位于/usr/share/applications中的.desktop文件中的文件的命令。 这是用于菜单,桌面快捷方式等的文件。

例如,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提供系统默认值的信息。 除非您另行选择,否则这些是您打开文件时使用的应用程序。

为了补充dv3500ea的优秀答案,我想补充一些关于更改关联时会发生什么的信息。

虽然defaults.list(您可以通过键入’locate defaults.list’找到)提供与每种MIME类型关联的应用程序列表,但您所做的任何自定义都存储在主目录中,在〜/ .local /中共享/应用/ mimeapps.list。 因此,如果添加或删除关联,或更改默认关联,则会更新此文件。

http://library.gnome.org/admin/system-admin-guide/stable/上的GNOME桌面系统管理指南似乎没有讨论mimeapps.list,但我在http://live.gnome上找到了以下描述.org / SysAdminGuideUpdate :

mimeapps.list位于$ XDG_DATA_DIRS / applications中。 其目的是在应用程序中添加或删除mime关联。 当用户在“打开方式”对话框中进行更改时,nautilus会写入〜/ .local / share / applications / mimeapps.list。

我发现在我的系统(Debian Jessie)上还有一个~/.config/mimeapps.list ,它有一个我意外创建的关联,用gedit打开一个特定的文件类型。 没有任何标准的纠正方法(默认的应用程序设置,Thunar的open with property)都反映了这一点,但gedit是默认的应用程序。

我能够从~/.config/mimeapps.list删除该行,现在正确的应用程序打开该文件。

使用以下行在~/.local/share/applications创建文件truecrypt.desktop

 [Desktop Entry] Encoding=UTF-8 Type=Application Icon= Exec=/usr/bin/truecrypt %U Name=truecrypt Comment=manage truecrypt volumes 

然后编辑文件~/.local/share/applications/mimeapps.list并添加以下行:

 application/octet-stream=truecrypt.desktop 

我通过以下运行此命令找到了mime类型的Truecrypt:

 file --mime-type -b  

我能够设置这样的关联:

 xdg-mime default xnview.desktop image/jpeg 

您还可以删除关联并执行其他操作: man xdg-mime

我不需要运行sudo update-desktop-database

我发现此链接涉及默认关联,它可能会有所帮助。 https://wiki.archlinux.org/index.php/Default_Applications
全球协会:

 /usr/share/applications/mimeapps.list 

每个用户关联:

 ~/.local/share/applications/mimeapps.list 

语法如下:

 [Added Associations] mimetype=desktopfile1;desktopfile2;...;desktopfileN ... [Removed Associations] mimetype=desktopfile1;desktopfile2;...;desktopfileN 

[Added Associations]部分用于指定优先级降低的首选(默认)应用程序。 这意味着desktopfile1是最受欢迎的, desktopfileN是最不受欢迎的
[Removed Associations]部分用于显式删除任何先前inheritance的关联。

mimeapps.list搜索路径

其他人已经提到了这个文件,但没有一个人精确地解释了它的位置。

freedesktop.org标准在https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.html上说:

该文件的查找顺序如下:

 $XDG_CONFIG_HOME/$desktop-mimeapps.list user overrides, desktop-specific (for advanced users) $XDG_CONFIG_HOME/mimeapps.list user overrides (recommended location for user configuration GUIs) $XDG_CONFIG_DIRS/$desktop-mimeapps.list sysadmin and ISV overrides, desktop-specific $XDG_CONFIG_DIRS/mimeapps.list sysadmin and ISV overrides $XDG_DATA_HOME/applications/$desktop-mimeapps.list for completeness, deprecated, desktop-specific $XDG_DATA_HOME/applications/mimeapps.list for compatibility, deprecated $XDG_DATA_DIRS/applications/$desktop-mimeapps.list distribution-provided defaults, desktop-specific $XDG_DATA_DIRS/applications/mimeapps.list distribution-provided defaults 

然后,这些环境变量的默认值在https://specifications.freedesktop.org/basedir-spec/basedir-spec-0.6.html中给出:

  • $XDG_DATA_HOME$HOME/.local/share
  • $XDG_CONFIG_HOME$HOME/.config
  • $XDG_DATA_DIRS :none,附加到XDG_DATA_HOME
  • $XDG_CONFIG_DIRS :none,附加到XDG_CONFIG_HOME

较旧版本的Ubuntu可能无法检查~/.config ,因此请确保您尝试~/.local/share

命令如:

  xdg-settings set default-web-browser chromium-browser.desktop xdg-settings get default-web-browser 

将自动编辑这些文件。

对于所有用户:

/usr/share/applications/defaults.list

每个用户都有一个配置文件来覆盖这些默认值:

〜/的.config / mimeapps.list

另请参阅https://specifications.freedesktop.org/mime-apps-spec/mime-apps-spec-1.0.1.html ,了解可能用于覆盖违约的地方。

您必须知道要更改其关联的文件的mime类型。

还可以使用以下命令在命令行中更改所有关联:

XDG-MIME

Freedesktop.org (以前称为X桌面组,因此是“XDG”的缩写)是目前正在推动X标准的团体( 在维基百科上了解更多信息 )。

warvariuc的回答已经提到xdg-mime用法如:

 xdg-mime default xnview.desktop image/jpeg 

在大量使用图像编辑器和观看者之后,我最终得到了不同图像类型的不同观看者几乎没有一致性,尤其是在罕见的图像类型中。

我使用上面的命令并将其分配给由图像查看器控制的每种MIME类型,然后通过克隆其中一个来创建一个新的image-viewer.desktop (这是可选的,您只能重复使用您喜欢的)。 接下来,我手动validation了所有MIME类型都不会与我的新首选应用程序不兼容。 最后,我将该应用程序设置为所有其他应用程序的MIME类型的默认值:

 sed '/^MimeType=/!d; s///; s/;/\n/g' \ /usr/share/applications/{ristretto,geeqie,gthumb}.desktop |sort -u \ |xargs xdg-mime default image-viewer.desktop 

这将检查每个查看器的.desktop文件(在我的情况下为Ristretto , Geeqie和GThumb ),提取MIME定义(以MimeType=开头,然后包含以分号分隔的列表),删除(先前匹配的)前言标签,并将列表拆分为每行一个条目。 sort -u然后删除冗余行,然后将它们交给xdg-mime来设置新的默认值。

(如果要在运行之前测试它,请将xargs更改为xargs echo ,它将打印生成的命令而不是运行它。)

此技术适用于您要为目标应用回收的任何内容。 您甚至不需要创建新的.desktop文件(您可以使用现有文件)。 我做了那个额外的步骤,这样当我不可避免地改变我对图像预览器之间的忠诚时,我只需要改变那个文件。