With the mknod command in Linux, you can create device files that function differently from the usual files. The mknod system call helps users create a filesystem node or special device files with mode and dev specified attributes.
The term mknod
, which stands for make node, is derived from the word inode, which refers to index node. When we talk about the inode, we’re looking at the fundamental unit of the metadata for file system entities in any UNIX-based system.
Although inodes in most cases describe plain disk files, the same in UNIX depict things more like network sockets. The mknod command in Linux helps build and make a directory entry and the related inode for any special file.
As already mentioned, the mknod
is a command-line utility that helps create filesystem nodes and named pathname, with mode and dev set attributes. The mode argument in mknod helps specify permission to create a node alongside defining the type.
The node you create is governed by the user ID that is in effect during the process. However, if the node’s directory has the preset group-ID bit, the newly created node inherits the group ownership from the root directory.
In this article, we’ll make you learn different ways to employ the mknod
command, but before that, let us have a quick look at the command’s syntax.
mknod Command in Linux: Syntax
The basic structure of mknod
command looks something like this:
$ mknod [Pathname] [OPTIONS]
Using mknod Command in Linux
Having discussed the syntax and other aspects of the mknod command in Linux, let us now learn how it works.
Indicating the Special File as Block Oriented Device
The mknod command in Linux can be used to indicate the special files. These usually include disk, tape, or diskette. For that, all you need to do is pass the b
flag. Running the mknod
command with the b
flag will display the block-oriented device files.
Indicating the Special File as Character Oriented Device
In case you want to display the special file as a character-oriented device using the mknod
command, pass the c
flag.
Creating FIFOs
The based usage of the mknod command in Linux is to create named pipes or FIFOs. To build a FIFO, you just need to use the p
flag alongside the mknod
command.
How does the mknod Command in Linux Works?
To help you understand the working of the mknod command in Linux, here are a few examples to look at. Walking through the following set of examples will help you figure out the best ways to invoke mknod
on your Terminal.
Creating a New Diskette Drive
Suppose you want to create a new diskette drive, /dev2/fd3
. In that case, launch the Terminal and run the following command:
$ mknod /dev2/fd3 b 1 2

Running the command mentioned above will create a special file /dev2/fd3
. It will be a special block file with 1
being the major device number and 2
being the minor.
Creating FIFO file
Creating a FIFO file with the mknod
command in Linux is super simple. Launch the Terminal using the Ctrl+Alt+T key combination and run the command as:
$ mknod [fifo filename] p

Creating the Special File for New Character Drive
For instance, if you’re willing to create a special file /devnew/fdnew
for the character drive, run the command like this:
$ mknod /devnew/fdnew c 2 1

Here, 2
and 1
represent the major device number and the minor device number, respectively.
mknod Command: Return Value
The mknod command in Linux returns 0
on being executed successfully. In other words, 0
as return value indicates the success status of mknod
command, while it displays -1
in case an error has occurred. Talking about errors in mknod
, there are several tags with varied meanings altogether.
EACCES
: You’ll get this error-tag when the provided parent directory does not allow the write permission to the involved process.
EEXIST
: It indicates that the pathname already exists.
EFAULT
: It indicates that the pathname provided points outside the accessible address space in your system.
EINVAL
: The requested mode creation of something intended other than any normal file, device, special file(s), FIFO, or the socket.
ELOO
: The system shows ELOO
when too many symbolic links are encountered while resolving pathname.
ENAMETOOLONG
: It indicates that the provided pathname was too long.
ENOENT
: In mknod, it represents that a directory component in the provided pathname does not exist, or else it is a dangling symbolic link.
ENOMEM
: It indicates that an insufficient kernel memory was available during the process.
ENOSPC
: The device that contains the pathname has no room for any new node.
ENOTDIR
: When this tag gets displayed, you need to understand that a component that is used as a directory in the pathname is, in fact, not a directory.
EPERM
: The mode requested the yield of something other than a standard file, or FIFO (the named pipe), or the Unix domain socket, and at the same time, the caller is not privileged.
The error message is also displayed if the filesystem that consists of the pathname doesn’t support the type of node you’ve requested.
(Keep in mind: Linux doesn’t have the CAP_MKNOD
ability)
EROFS
: The provided pathname refers to the file that sits on a read-only filesystem.
mknod Command Arguments
-m
, --mode
: It sets the file permission bites to MODE
-Z
: You can set the SELinux security context to the default type by using the Z
argument
Other mknod Command Options
--help
flag: It displays the help-related information about the mknod
command.
Input:
$ mknod --help
Output:

--version
flag: Passing this flag will display the mknod
command version information.
Input
$ mknod --version
Output:

This is pretty much everything about the mknod command in Linux. In this article, we tried our best to familiarize you with the command and make you learn the best possible ways of using it. We employed easily understandable examples so that you can have no issues whatsoever.
If this guide helped you, please share it.