
一、命令简介mknod 命令用于在 Linux 系统中创建设备特殊文件包括字符设备文件和块设备文件。这些文件通常位于 /dev 目录下是操作系统与硬件设备如磁盘、串口、终端等或内核提供的虚拟设备进行交互的接口。通过创建设备文件用户空间程序可以使用标准的文件操作如 open、read、write、close来访问和控制底层设备。二、语法格式基本语法bash运行mknod [选项]... 文件名 类型 [主设备号 次设备号]参数说明文件名要创建的设备文件的路径和名称。类型指定设备文件的类型必须是以下之一b创建块设备文件。c 或 u创建字符设备文件。p创建 FIFO命名管道文件此类型不需要指定主次设备号。主设备号一个整数用于标识设备驱动程序或设备类别。内核通过主设备号将设备文件与对应的驱动程序关联。次设备号一个整数用于标识同一驱动程序下的具体设备实例。三、常用选项及说明表格选项说明-m MODE, --modeMODE设置创建文件的权限模式如同 chmod。MODE 可以是八进制数如 0660或符号模式如 ugrw。-Z在支持 SELinux 的系统上为创建的文件设置默认的安全上下文。--help显示帮助信息并退出。--version显示版本信息并退出。注意 在现代 Linux 系统中大多数设备文件由 udev 或 systemd-udev 在系统启动或设备热插拔时自动创建。手动使用 mknod 创建设备文件通常仅用于特定场景如开发、测试或恢复。四、示例用法1. 创建一个字符设备文件假设需要手动创建一个模拟的串口设备文件 /dev/ttyEXAMPLE其主设备号为 188次设备号为 99bash运行sudo mknod /dev/ttyEXAMPLE c 188 99创建后可以设置合适的权限例如允许 dialout 组读写bash运行sudo chmod 660 /dev/ttyEXAMPLE sudo chgrp dialout /dev/ttyEXAMPLE2. 创建一个块设备文件创建一个块设备文件 /dev/loop99主设备号为 7loop 设备的主设备号次设备号为 99bash运行sudo mknod /dev/loop99 b 7 993. 创建文件时指定权限创建字符设备文件并直接设置权限模式为 crw-rw----即八进制 0660bash运行sudo mknod -m 0660 /dev/mydevice c 250 04. 创建 FIFO命名管道文件创建 FIFO 文件也称为命名管道用于进程间通信bash运行mknod mypipe p或使用专门命令bash运行mkfifo mypipe # mkfifo 命令是专门用于创建 FIFO 的更常用方式创建 FIFO 时不需要指定主次设备号。五、注意事项权限要求创建设备文件尤其是位于 /dev 目录下通常需要超级用户权限使用 sudo。设备号的有效性主设备号和次设备号必须是有效的数字且与内核中已注册的设备驱动程序对应。无效的设备号可能导致设备文件无法正常使用。可以通过查看 /proc/devices 文件了解当前系统已注册的字符设备和块设备的主设备号。自动管理 vs 手动创建在绝大多数情况下应依赖系统的自动设备管理机制如 udev来创建设备文件。手动创建的文件可能不会在系统更新或设备事件后持久存在或正确更新。字符设备 vs 块设备字符设备c提供无缓冲的串行数据流访问一次一个字符。例如终端/dev/tty*、串口/dev/ttyS*、键盘、鼠标等。块设备b数据以固定大小的块为单位进行读写支持随机访问和缓冲。例如硬盘/dev/sd*、光盘驱动器、RAM 磁盘等。FIFO 文件类型 p 创建的是 FIFO先进先出特殊文件用于进程间通信。它不关联任何设备驱动程序因此不需要主次设备号。mkfifo 命令是创建 FIFO 的更直观替代。已存在文件如果指定的文件名已存在mknod 命令会失败除非使用 -f 或 --force 选项但请注意标准 mknod 工具通常不提供此选项某些实现可能有。