それではmknod
、このコマンドは何をしますか?
/dev/random$ mknod -m 666 random c 1 8
私はそれが-m
権限を指定し、mknod
通常はファイル、ディレクトリ、デバイス、fifoなどになることができるファイルシステムを作成することを知っていますinode
。しかし、最後の3つのパラメータが何をしているのかは本当に理解していません。
答え1
最後の3つのパラメータは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は使いやすいです。