如何在 Linux 中使用 mknod 命令创建设备文件

Linux,,甚至磁盘驱动器、CD/DVD ROM 和软盘等物理设备也使用文件来表示。但是,这些文件不是常规数据文件。相反,这些特殊文件称为设备文件,它们可以生成或接收数据。

通常,所有特殊文件都存在于/dev目录。特殊文件的一些常见示例是/dev/空,/dev/零,/dev/完整, 和/dev/sr0

特殊文件可以是字符类型或块类型。顾名思义,字符文件一次处理一个字符,而块文件一次处理多个字符。

在本高级指南中,我们将讨论如何使用姆诺德命令。遵循本指南后,Linux 用户将能够自信地使用不同类型的设备文件。

mknod 命令语法

的语法姆诺德命令与。主要区别在于我们需要在创建字符和块设备文件时指定主设备号和次设备号:

$ mknod [OPTIONS]   [MAJOR] [MINOR] ...

在上面的语法中,方括号([])代表可选参数,而尖括号(<>)代表强制参数。

在Linux中,主设备号用于指定需要使用的设备驱动程序。该编号是在注册设备驱动程序时分配的。

以类似的方式,次设备号用于指定实际设备。我们可以在Linux 内核的文档

1.在Linux中创建无名管道

在Linux中,我们使用管道来实现进程间通信。在 Shell 中,管道使用垂直线表示(|)。它读取前一个进程的输出并将其作为输入发送到下一个进程。

让我们通过一个简单的例子来理解这一点:

$ echo "tecmint.com" | wc -c

在此示例中,我们使用管道读取并将其作为输入发送到以便进一步加工。

在这里,我们使用了垂直线(|)创建一个管道。但是,这会创建一个未命名管道,并且其范围仅限于当前命令。在下一个示例中,我们将了解如何创建命名管道。

2.在Linux中创建命名管道

我们可以使用姆诺德创建命名管道的命令。命名管道与任何其他常规文件一样驻留在文件系统上。然而,它的主要目的是允许不相关的进程之间进行进程间通信。

首先,我们将设备类型指定为p创建命名管道:

$ mknod /tmp/named-pipe p
$ ls -l /tmp/named-pipe 

现在,让我们尝试读取该文件:

$ cat /tmp/named-pipe

在这里,我们可以看到,正在无限等待:

读取命名管道文件

接下来,让我们打开另一个终端并向其中写入一些数据/tmp/命名管道文件:

$ echo "tecmint.com" > /tmp/named-pipe

最后,转到第一个终端查看结果:

查看命名管道文件

在这里,我们可以看到,回声命令能够使用命名管道进行通信。

3.在Linux中创建字符设备文件

以类似的方式,我们可以将设备类型用作c创建字符设备。然而,我们在创建字符设备时必须使用主设备号和次设备号。

让我们使用查找主要号码和次要号码/dev/完整设备:

$ ls -l /dev/full
查找文件主次编号

在上面的输出中,以逗号分隔的数字对,即1,7分别代表主数和次数。

在 Linux 中,/dev/完整设备总是返回设备上没有剩余空间错误。为了理解这一点,让我们向该设备写入一些数据:

$ echo "tecmint.com" > /dev/full
将数据写入设备文件

现在,让我们使用姆诺德命令创建一个行为相同的新设备/dev/完整设备:

$ sudo mknod /tmp/full-device c 1 7

接下来,让我们更改文件权限:

$ sudo chmod 666 /tmp/full-device 
$ ls -l /tmp/full-device

最后,将一些数据写入新创建的设备:

$ echo "tecmint" > /tmp/full-device
创建新设备文件

需要注意的是,新创建的字符设备的行为类似于/dev/完整设备,因为主设备号和次设备号相同。

4.在Linux中创建块设备文件

除此之外,我们还可以将设备类型指定为b创建块设备。要创建块设备,我们必须使用主设备号和次设备号。

在Linux中,/dev/sr0代表光盘/DVD光盘设备。现在,让我们创建一个新的块设备,其行为与/dev/sr0

首先,让我们找出主要和次要号码/dev/sr0:

$ ls -l /dev/sr0
检查设备文件主要和次要编号

在上面的输出中,我们可以看到它的主要编号和次要编号是110分别。

现在,让我们创建一个具有相同主设备号和次设备号的新块设备:

$ sudo mknod /tmp/dvd-rom b 11 0
$ ls -l /tmp/dvd-rom 
创建新的块设备

接下来,我们将 CD/DVD ROM 中的 ISO 映像挂载到/mnt目录并验证挂载操作是否成功:

$ sudo mount /tmp/dvd-rom /mnt/
$ ls -1 /mnt/
挂载新的块设备

在这个例子中,我们可以看到/tmp/dvd-rom块设备能够从 CD/DVD ROM 访问 ISO 映像。

5. 创建具有权限的设备文件

有时,我们需要在使用设备文件之前修改其访问权限。在这种情况下,我们必须使用chmod命令。但是,我们可以使用以下方法获得相同的结果姆诺德命令而不是使用两个单独的命令。

为了理解这一点,让我们使用-m创建命名管道时设置访问权限的选项:

$ sudo mknod -m 444 /tmp/pipe-with-permissions p

现在,让我们验证权限是否已正确设置:

$ ls -l /tmp/pipe-with-permissions
创建具有权限的设备文件

在这个例子中,我们使用了-m带有命名管道的选项。但是,我们也可以将它与字符设备和块设备一起使用。

你还知道其他最好的例子吗?姆诺德Linux 中的命令?请在下面的评论中告诉我们您的看法。