mknod 是做什么的?

mknod 是做什么的?

那么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 应该更容易使用。

相关内容