Why the difference between the results with "file --mime-type" and "xdg-mime query filetype"?

@jdpipe appears to be correct regarding the behavior of xdg-mime and file. There is another utility mimetype that behaves similarly to xdg-mime.

As far as which utility to "trust", it's usually fine to just use mimetype or xdg-mime. However, if you are concerned that a file may have the wrong extension, use file because it examines the contents of the file before reporting its type. For example, if a png is renamed as jpg, file correctly reports "image/png", but xdg-mime and mimetype both incorrectly report "image/jpeg".

As noted by @db429, it appears both utilities are correct for the kmz file you cite. Google Earth creates kmz files, which are also renamed zip files. What you want to do with the information determines which application to use. If you want to extract the contents, then file tells you to go ahead and use unzip. If you want to view and use the information as originally intended, use Google Earth or another program capable of using kmz files.

Regarding the iso file, I do not know why xdg-mime is telling you model/x.stl-binary. On my computer, it reports application/x-cd-image. Also, using file without the --mime-type flag reports additional information that confirms it is some type of disk image. Perhaps it would be helpful to update the mime database:

sudo update-mime-database /usr/share/mime

The xdg-mime utility from xdg-utils is a more comprehensive program that takes into account your desktop environment (GNOME and relatives, or KDE). In some cases it makes a call to the file utility, but in other cases it looks up the mimetype database for your particular system.

The file utility, as far as I can tell, only looks inside your file, it doesn't look at the filename. Hence the .kmz file, is recognised as a zip file. file makes use of 'magic numbers' which are associated with particular file types, eg the magic string P5 at the start of a file is associated with PGM images from the Netpbm library.

The mimetype database knows about higher-level filetypes, as identified using filename extensions, and can be user-customised. When new programs are installed, the mimetype database is extended and will give answers that might not have been given before certain software was installed. To my knowledge, that behaviour doesn't happen with the file command.

If you want to read more, the xdg-mime details are here -- source code. You can see that it calls file in some cases.


As far as I can tel in 18.04 (more here):

xdg-mime query filetype YOURFILE

is the one that is reliable.

If you need the mime type to have a context menu action with some file manager like Nautilus or Dolphin, look in that file manager under the file's "Properties".

In Dolphin:

enter image description here