mknod 是 Linux 中用于手动创建特殊文件的命令,主要包括设备文件(如硬盘、终端)和命名管道(FIFO)。它通过在文件系统中创建节点,为用户空间程序和内核驱动程序建立桥梁。不过,现在主流 Linux 发行版多使用 udev 自动管理设备文件,因此手动创建的场景较少。
1. 命令格式
基本语法如下,使用普通用户执行时需要加 sudo 获取 root 权限:
mknod [选项] 名称 类型 [主设备号 次设备号]
· -m MODE:创建时直接设置权限(如 -m 660),默认为 a=rw 减去 umask。
· 名称:设备文件的路径(如 /dev/mydev)。
· 主设备号:标识设备对应的驱动程序。
· 次设备号:标识同一驱动下的具体设备实例。
2. 类型参数
mknod 支持创建以下三种类型的特殊文件:
类型 含义说明
b 块设备 带缓存、固定数据块读写(如硬 盘), 需指定主、次设备号。
c 或 u 字符设备 无缓存、字符流读写(如键盘、串 口)。需指定主、次设备号。
p FIFO 即命名管道,用于进程间通信,不需 要指定设备号。
3. 常见用法示例
· 创建块设备:模拟第一个磁盘 /dev/sda(主设备号8,次设备号0)。
sudo mknod /dev/sda b 8 0
· 创建字符设备:模拟数据黑洞 /dev/null(主设备号1,次设备号3)。
sudo mknod /dev/null c 1 3
· 创建命名管道:在当前目录下创建名为 myfifo 的管道。
sudo mknod myfifo p
· 设置权限:创建字符设备并直接设置权限为 660。
sudo mknod -m 660 /dev/uart c 4 64
4. 重要注意事项
· 需要 root 权限:因为涉及内核设备交互,必须使用 sudo。
· 设备号要准确:主、次设备号是驱动标识,不能随意指定。可通过 ls -l /dev/sd* 或 /proc/devices 查询已用的设备号。
· 避免与现有文件冲突:若文件已存在,需先删除再创建。
· 文件系统支持:设备文件是 Linux 特性,无法在 FAT32/NTFS 这类文件系统上创建。
· 现代 Linux 替代方案:/dev 目录通常由 devtmpfs 和 udev 自动管理。除非是学习、嵌入式定制或恢复系统,否则极少需要手动执行 mknod。