那么mknod
这个命令有什么作用呢?
/dev/random$ mknod -m 666 random c 1 8
我知道它-m
指定了权限,并且mknod
总体上在文件系统中创建了一个inode
可以是文件、目录、设备、fifo 等的...但我真的不明白最后 3 个参数的作用。
答案1
最后三个参数是类型、主要、次要。他们决定设备实际代表什么;该名称是约定,但不决定功能。如果你创建它,/dev/wubbalubbadubdub
它仍然/dev/random
和类型、主要、次要所说的一样长。
类型c
是字符设备(与块设备相对)。
主要/次要数字本质上是幻数。除了参考相关的内核文档之外,没有其他方法可以理解它们。
https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
因此,在您的情况下,您有字符设备,主要 1,次要 8,其记录如下:
1 char Memory devices
⇑MAJOR ⇓MINOR = /dev/name
1 = /dev/mem Physical memory access
2 = /dev/kmem Kernel virtual memory access
3 = /dev/null Null device
4 = /dev/port I/O port access
5 = /dev/zero Null byte source
6 = /dev/core OBSOLETE - replaced by /proc/kcore
7 = /dev/full Returns ENOSPC on write
8 = /dev/random Nondeterministic random number gen.
9 = /dev/urandom Faster, less secure random number gen.
10 = /dev/aio Asynchronous I/O notification interface
11 = /dev/kmsg Writes to this come out as printk's, reads
export the buffered printk records.
12 = /dev/oldmem OBSOLETE - replaced by /proc/vmcore
这就是全部内容。如果你想要/dev/random
你必须使用c 1 8
.如果你想要这样/dev/urandom
,那就是c 1 9
。这就是历史上在内核中枚举它的方式。
大多数时候,您只使用内核、devtmpfs、udev 或发行版提供的静态 /dev 结构提供的设备节点;你很少需要自己创建它们,即使这样也可能有帮助者,所以你不必自己找出正确的幻数。
您还可以使用 mknod 创建 FIFO,但 mkfifo 应该更容易使用。