How to Create a Magic File
Using the file command to create a magic file that shows all files type in a directory
Table of contents
- What is a Magic File?
- How The File Commands Reads the Magic File
- How to Generate and Read a Magic File Using the File Command
You need to at least have a basic understanding of the shell as well as the terminal and basic shell commands to be able to articulate this. You can check my articles on the shell, navigation where I wrote about the aforementioned.
Among all the shell commands, one of the most basic commands is the
This command is used to identify a wide variety of file types e.g. text files, executable files, image files, audio files etc.
This command is quite useful as it can come in handy when one is troubleshooting files as well as for security purposes.
Troubleshooting comes into play when one is having a problem opening a file, you can simply use the command to identify the file type which can help you know the right tool to be used to open the file.
For security purposes, you can decide to identify the file type of a file that you are concerned about its content before opening the file to know whether it is safe to open the file or not.
What is a Magic File?
A magic file is simply a text file that contains a database of known file types. It is used by the
file command to identify the type of file.
How The File Commands Reads the Magic File
file command reads the magic file that is generated and compares the strings/numbers in the file whose type is to be checked to the strings/numbers in the magic file. If there is a match, the file command will identify the file as the type of file that is defined in the magic file.
How to Generate and Read a Magic File Using the File Command
Let us look at this simple task that will help us go through the whole process of generating and reading a magic file.
Create a magic file
grit.mgcthat can be used with the command
Gritdata files always contain the string
GRITat offset 0.
What this means is that we should create a magic file with the name
grit.mgc, that can be used with the
file command, this
grit.mgc file should check for the
GRIT at offset
0, that is it is to check for the files whose contents begin with the word
GRIT at the very beginning, and if found, it should return the name of the file data type as
Grit data and
Grit as the custom
mime type of the file.
"Multipurpose Internet Mail Extensions". It is a standard way of describing the content of a file, such as text, images, audio, and video.
MIMEtypes are used by web servers, email clients, and other software to determine how to handle a file.
We can perform this task in several steps shown below:
Step 1: Create a Text File
Create a plain text file called grit, you can use the command:
We named the text file
grit because we are asked to create a magic file with the name
grit.mgc, so the name of our file has to match the name of the magic file as the magic file will be formed from our file
Step 2: Put the Magic Content into the File
Open the text file you just created (grit). You can use any text editor (vim, vi, emacs, nano etc.). Afterward, enter the following into the grit text file:
1. 0 string GRIT Grit data
2. !:mime Grit
On the first line of your editor, you put your
0, which is the
offset, then press your
tab button, followed by a
string, since we want to check for a word, then followed by the word we want to check, which in this case is
GRIT, then followed by the name of the file
data type we want any file starting with the word GRIT to appear, which here is
On the second line, you will enter the
mime type of the file, which according to our task is
Next, you save and exit the file.
Step 3: Use File Command to Create the Magic File
Use the file command to create the magic file. You can do that using the command below:
file -C -m grit
We use the command
file, followed by the option
-C, with C in uppercase, tells the file command that we want to create a file, followed by the
-m, which tells it that it is a magic file, so the command typically creates a magic file with the name grit.
After running this command, you should see the magic file that is created in the same directory as the grit file.
You can see how the magic file created is now
Step 4: Check the File Data Type
To check for the file data type of all the files in the directory containing the magic file, simply use the command:
file -m grit.mgc *
After running this command, on my machine, I created 5 files to test for the magic content, so I used the exact string
GRIT to start the content of the
file 2, that is the
real01, while I used the string Grit to start the content of the
file 3 which is
test, and lastly, I used the string GRIT for
files 1, that is the
fake01, but not at the start, I put them in between.
You can see that base on the law we set for the magic content,
real01 returns a
Grit data, while the rest still carries
GRIT, but not at the beginning of the text file thus, returns a file data type of
Below are the contents of the files:
Step 5: Check the MIME Data type
This is the final step, and this step is used to check the mime data type of every file in the directory, the command used here is:
file --mime-type -m grit.mgc *
You can see from the image above the
MIME data type of the magic file
grit.mgc as we set it in the
grit file, which if you remember is
This is simply how to work with magic files using the file command on the shell.
I hope you enjoyed the tutorial and understand how to work with magic files now. I will love to see your comment on this. And please you can follow me on Twitter and LinkedIn and join me in my Software Engineering Journey. Thank you!