基本上,我试图获取 Linux 中已安装的程序列表,例如可以打开特定文件扩展名 .jpg
。如果不是全部,至少应该列出默认程序。
最佳答案
Linux(内核)不知道文件类型到应用程序的映射。如果你想使用 Gnome 程序,你可以查看 https://people.gnome.org/~shaunm/admin-guide/mimetypes-7.html .对于 KDE,还有另一种机制。每个工具包都可以随心所欲地定义它。程序员可以使用或不使用默认值。所以它只是特定于应用程序的!
你想达到什么目的?
如果您使用资源管理器/浏览器应用程序(双击)单击图标或文件名,资源管理器/浏览器会准确查找文件类型。通常这是通过 mime 类型字典实现的。但是程序如何查找文件类型并可能执行另一个程序只与编写该程序的程序员有关。 Gnome 和 KDE 等 GUI 工具链为该主题提供了很多支持,因此您对每个应用程序系列都有基本的一致性。
如果您想知道一个应用程序是如何完成这项工作的,请使用 strace
启动它。但是海量的数据很难挖掘。
您还可以查看 xdg-open
。许多程序使用这个助手来启动应用程序。例如:如果您使用 strace
启动 Dolphin,您会发现类似 lstat64("/etc/xdg", {st_mode=S_IFDIR|0755, st_size=4096, ...} ) = 0
单击文件后。
您可以从命令行运行:
xdg-open <file-name>
您可能还想查看注册文件类型的应用程序:/usr/share/applications/*.desktop
在这里您可以在每个桌面文件中找到一些为应用程序注册的 mime 类型。例如。 audiacity
是:
MimeType=application/x-audacity-project;audio/flac;audio/x-flac;audio/basic;audio/x-aiff;audio/x-wav;application/ogg;audio/x-vorbis+ogg;
对于您使用 jpg
的示例:
$ xdg-mime query filetype <any-jpg-file>
image/jpeg
$ grep 'image/jpeg' -R /usr/share/applications/*
...
/usr/share/applications/mimeinfo.cache:image/jpeg2000=kde4-kolourpaint.desktop;gimp.desktop;
所以你可以看到 gimp
是 jpg
关于linux - 如何获取可以在 Linux 中打开特定文件扩展名的程序列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30662334/