Mknod

mknod 是做什麼的?

  • January 15, 2020

那麼mknod命令,它有什麼作用?

/dev/random$ mknod -m 666 random c 1 8

我知道這-m指定了權限,並且mknod總體上在文件系統中創建了一個inode可以是文件、目錄、設備、fifo 等的文件……但我真的不明白最後 3 個參數是做什麼的。

最後三個參數是類型、主要、次要。他們確定設備實際代表什麼;名稱是約定俗成的,但不能確定功能。如果你創建它,/dev/wubbalubbadubdub它仍然/dev/random和類型一樣長,major,minor 說它是這樣的。

類型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 應該更易於使用。

引用自:https://unix.stackexchange.com/questions/562341