그러면 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/urandom
c 1 9
대부분의 경우 커널, devtmpfs, udev 또는 배포판에서 제공하는 정적 /dev 구조에서 제공하는 장치 노드를 사용합니다. 이를 직접 생성할 필요가 거의 없으며, 심지어 외부에 도우미가 있을 수도 있습니다. 올바른 매직 넘버를 스스로 알아낼 필요는 없습니다.
mknod를 사용하여 FIFO를 생성할 수도 있지만 mkfifo가 사용하기 더 쉽습니다.