mknod는 무엇을 하나요?

mknod는 무엇을 하나요?

그러면 mknod이 명령은 무엇을 하는가?

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

나는 그것이 -m권한을 지정하고 mknod일반적으로 파일, 디렉토리, 장치, fifo 등이 될 수 있는 파일 시스템을 생성한다는 것을 알고 있습니다 inode. 그러나 마지막 3개의 매개변수가 무엇을 하는지는 정말로 이해하지 못합니다.

답변1

마지막 세 개의 매개변수는 type, major 및 major입니다. 장치가 실제로 무엇을 나타내는지 결정합니다. 이름은 관례이지만 기능을 결정하지는 않습니다. 만들어 보면 아직은 Type, Major, Minor가 말하는 만큼의 길이 /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/urandomc 1 9

대부분의 경우 커널, devtmpfs, udev 또는 배포판에서 제공하는 정적 /dev 구조에서 제공하는 장치 노드를 사용합니다. 이를 직접 생성할 필요가 거의 없으며, 심지어 외부에 도우미가 있을 수도 있습니다. 올바른 매직 넘버를 스스로 알아낼 필요는 없습니다.

mknod를 사용하여 FIFO를 생성할 수도 있지만 mkfifo가 사용하기 더 쉽습니다.

관련 정보