Introduction to File MIME Types on Linux


MIME types are a crucial aspect of Linux file management, as they enable the operating system to identify the file format and determine the appropriate program for opening the file. Understanding MIME types can be beneficial, especially when dealing with various file formats on Linux systems. This article provides an overview of MIME types and explains how to determine the MIME type of a file on Linux. It also introduces the xdg-mime command, a powerful tool for managing MIME types on Linux, allowing users to change the default application associated with a particular file type or add new MIME types. Knowing how to manage MIME types can enhance productivity and improve the overall user experience when working with files on Linux systems.

Different Mime types in Linux

In Linux, MIME types (Multipurpose Internet Mail Extensions) are used to identify the types of files based on their content and to associate them with corresponding applications. Here are some of the most common MIME types used in Linux −

text/plain - Plain text files
text/html - HTML files
application/pdf - PDF documents
image/jpeg - JPEG image files
image/png - PNG image files
video/mp4 - MP4 video files
audio/mp3 - MP3 audio files
application/zip - ZIP compressed archive files
application/json - JSON data files
application/xml - XML data files

You can view the MIME type of a file by using the "file" command followed by the file name. For example, "file document.pdf" would display the MIME type of the "document.pdf" file as "application/pdf".

To know the MIME Type

Although MIME type serves as a standard means of identifying a file type, it is not stored within the Linux filesystem for individual files.

There are two ways to know the mime type −

  • MIME Types by File Extension

  • MIME Types by File Content

  • MIME Types by File Extension − One approach to determine the MIME Type is to use the file extension. However, if the extension is incorrect or missing, this approach may not be correct. Determining the MIME type of a file solely based on its extension is not always reliable.

  • MIME Types by File Content − We can get MIME type by file content. For example, JPG image files have unique hex signatures such as FF D9 and FF D8. This approach is better, but it requires additional I/O efforts and can be slower.

In summary, to accurately determine a file's MIME Type in Linux, we must consider both the file extension and the file content's specific characteristics. This approach ensures that the MIME Type is determined correctly, even if the file extension is incorrect or missing.

Discovering the MIME types of files using the xdg-mime command

The xdg-mime utility utilizes the shared-mime-info database for identifying MIME types. Initially, it attempts to recognize the MIME type based on the file's extension. In case of failure, it proceeds to analyse the content of the file.

you can use the xdg-mime command to get the MIME type of a JPG image file. Here's an example −


# Query the MIME type of the JPG image file
xdg-mime query filetype example.jpg



The output indicates that the MIME type of the file example.jpg is ‘image/jpeg’, which means that the file is a JPEG image file. The xdg-mime command determines the MIME type based on the file content, not the file extension. In this case, the content of the file indicates that it's a JPEG image file, which is why the command returns ‘image/jpeg’.


Let's modify the file extension and observe the output of the xdg-mime command.

$ mv example.jpg

$ xdg-mime query filetype



So, it showing the wrong mime type because the xdg-mime command initially searches for a MIME type in the database based on the file extension.


If we eliminate the file extension completely, let's observe the outcome −

$ mv example

$ xdg-mime query filetype example



When a MIME type cannot be determined by file extension using the xdg-mime command, it will resort to searching for the MIME type based on the file's content.

The file Command

The "file" command is commonly included in free operating systems like FreeBSD and Linux, and can be utilized with the "--mime-type" option to retrieve the MIME type of a given file.


$ file --mime-type example.jpg


example.jpg: image/jpeg

Let's test the accuracy of the "file" command's output by changing the file extension and verifying if it can still correctly identify the MIME type of the modified file.


$ mv example.jpg

$ file --mime-type

Output image/jpeg

The "file" command remains reliable even when the file extension is altered, as it doesn't rely on the extension to identify the file's MIME type. Rather, it examines the actual contents of the file to make this determination. This approach makes the "file" command more dependable in such cases.

We eliminate the file extension and rely on the continued accuracy of the file command.


$ mv example

$ file --mime-type example


example: image/jpeg

As we know that that “file” command not focus on the extension it focusses on the contents that’s why it showing the same output.


Linux uses MIME types to interpret files, indicating their format and how to display or open them. The "file" command identifies MIME types easily. You can register custom MIME types for unrecognized file formats, and MIME types are vital in web development to display web pages correctly in browsers.