デバイス・ファイルについて
/dev
ディレクトリには、デバイス・ファイルまたはデバイス・ノードが格納され、このファイルによって、ハード・ディスクなどの周辺デバイス、ディスク・パーティションなどの周辺デバイス上のリソース、および乱数ジェネレータなどの擬似デバイスへのアクセスが可能になります。
/dev
ディレクトリには複数のサブディレクトリ階層が含まれ、各階層には特定タイプのデバイスに関連するデバイス・ファイルが保持されます。ただし、これらのサブディレクトリの内容は、/dev
内の対応するファイルへのシンボリック・リンクとして実装されます。このため、/dev
内のリンク・ファイル、またはサブディレクトリ内の対応するファイルからファイルにアクセスできます。
ls -l /devコマンドを使用すると、ファイルのリストが表示され、その一部にタイプb
(blockの場合)またはタイプc
(characterの場合)のいずれかとしてフラグが付けられます。これらのデバイスには、デバイスとシステムを識別する番号のペアが関連付けられています。
ls -l /dev
total 0
crw-r--r--. 1 root root 10, 235 Aug 20 08:36 autofs
drwxr-xr-x. 2 root root 240 Sep 20 07:37 block
drwxr-xr-x. 2 root root 100 Aug 20 08:36 bsg
drwxr-xr-x. 3 root root 60 Nov 4 2019 bus
lrwxrwxrwx. 1 root root 3 Aug 20 08:36 cdrom -> sr0
drwxr-xr-x. 2 root root 2720 Sep 20 07:37 char
crw-------. 1 root root 5, 1 Aug 20 08:36 console
lrwxrwxrwx. 1 root root 11 Aug 20 08:36 core -> /proc/kcore
drwxr-xr-x. 3 root root 60 Nov 4 2019 cpu
crw-------. 1 root root 10, 62 Aug 20 08:36 cpu_dma_latency
drwxr-xr-x. 7 root root 140 Aug 20 08:36 disk
brw-rw----. 1 root disk 253, 0 Aug 20 08:36 dm-0
brw-rw----. 1 root disk 253, 1 Aug 20 08:36 dm-1
brw-rw----. 1 root disk 253, 2 Aug 20 08:36 dm-2
lrwxrwxrwx. 1 root root 13 Aug 20 08:36 fd -> /proc/self/fd
crw-rw-rw-. 1 root root 1, 7 Aug 20 08:36 full
crw-rw-rw-. 1 root root 10, 229 Aug 20 08:36 fuse
crw-------. 1 root root 10, 228 Aug 20 08:36 hpet
drwxr-xr-x. 2 root root 0 Aug 20 08:36 hugepages
crw-------. 1 root root 10, 183 Aug 20 08:36 hwrng
lrwxrwxrwx. 1 root root 12 Aug 20 08:36 initctl -> /run/initctl
drwxr-xr-x. 3 root root 220 Aug 20 08:36 input
crw-r--r--. 1 root root 1, 11 Aug 20 08:36 kmsg
lrwxrwxrwx. 1 root root 28 Aug 20 08:36 log -> /run/systemd/journal/dev-log
brw-rw----. 1 root disk 7, 0 Sep 23 01:28 loop0
crw-rw----. 1 root disk 10, 237 Sep 20 07:37 loop-control
drwxr-xr-x. 2 root root 120 Aug 20 08:36 mapper
crw-------. 1 root root 10, 227 Aug 20 08:36 mcelog
crw-r-----. 1 root kmem 1, 1 Aug 20 08:36 mem
crw-------. 1 root root 10, 59 Aug 20 08:36 memory_bandwidth
drwxrwxrwt. 2 root root 40 Nov 4 2019 mqueue
drwxr-xr-x. 2 root root 60 Aug 20 08:36 net
crw-------. 1 root root 10, 61 Aug 20 08:36 network_latency
crw-------. 1 root root 10, 60 Aug 20 08:36 network_throughput
crw-rw-rw-. 1 root root 1, 3 Aug 20 08:36 null
crw-------. 1 root root 10, 144 Aug 20 08:36 nvram
drwxr-xr-x. 2 root root 100 Aug 20 08:36 ol_ca-virtdoc-oltest1
crw-r-----. 1 root kmem 1, 4 Aug 20 08:36 port
crw-------. 1 root root 108, 0 Aug 20 08:36 ppp
crw-rw-rw-. 1 root tty 5, 2 Oct 7 08:10 ptmx
drwxr-xr-x. 2 root root 0 Aug 20 08:36 pts
crw-rw-rw-. 1 root root 1, 8 Aug 20 08:36 random
drwxr-xr-x. 2 root root 60 Nov 4 2019 raw
lrwxrwxrwx. 1 root root 4 Aug 20 08:36 rtc -> rtc0
crw-------. 1 root root 251, 0 Aug 20 08:36 rtc0
brw-rw----. 1 root disk 8, 0 Aug 20 08:36 sda
brw-rw----. 1 root disk 8, 1 Aug 20 08:36 sda1
brw-rw----. 1 root disk 8, 2 Aug 20 08:36 sda2
brw-rw----. 1 root disk 8, 16 Aug 20 08:36 sdb
brw-rw----. 1 root disk 8, 17 Aug 20 08:36 sdb1
crw-rw----. 1 root cdrom 21, 0 Aug 20 08:36 sg0
ブロック・デバイス
ブロック・デバイスでは、データへのランダム・アクセス、データ用のメディアの検索が可能であり、通常は、データの書込みまたは読取り中にデータをバッファリングします。ブロック・デバイスの例として、ハード・ディスク、CD-ROMドライブ、フラッシュ・メモリー、その他のアドレス可能なメモリー・デバイスがあります。
キャラクタ・デバイス
キャラクタ・デバイスを使用すると、デバイスに対するデータのストリーミングが可能になります。通常、データはバッファリングされず、デバイス上のデータへのランダム・アクセスも許可されません。カーネルは、キャラクタ・デバイスに対して、一度に1バイトずつデータの書込みまたは読取りを行います。キャラクタ・デバイスの例として、キーボード、マウス、端末、擬似端末およびテープ・ドライブがあります。tty0
とtty1
は端末デバイスに対応するキャラクタ・デバイス・ファイルで、ユーザーはシリアル端末または端末エミュレータからログインできます。
擬似端末のキャラクタ・デバイス
擬似端末のセカンダリ・デバイスは、実際の端末デバイスをエミュレートしてソフトウェアと相互作用します。たとえば、ユーザーは端末デバイス(/dev/tty1
など)にログインし、擬似端末のプライマリ・デバイス/dev/pts/ptmx
を使用して、基礎となる擬似端末デバイスと相互作用します。擬似端末のセカンダリ・デバイスおよびプライマリ・デバイスのキャラクタ・デバイス・ファイルは、次の例に示すように/dev/pts
ディレクトリにあります:
ls -l /dev/pts
total 0
crw--w----. 1 guest tty 136, 0 Mar 17 10:11 0
crw--w----. 1 guest tty 136, 1 Mar 17 10:53 1
crw--w----. 1 guest tty 136, 2 Mar 17 10:11 2
c---------. 1 root root 5, 2 Mar 17 08:16 ptmx
stdin
(標準入力)など一部のデバイス・エントリは、proc
ファイル・システムのself
サブディレクトリを介してシンボリック・リンクされます。これらが参照する擬似端末デバイス・ファイルは、プロセスのコンテキストによって異なります。
ls -l /proc/self/fd/[012]
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/0 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/1 -> /dev/pts/0
lrwx------. 1 root root 64 Oct 7 08:23 /proc/self/fd/2 -> /dev/pts/0
null
、random
、urandom
およびzero
文字デバイス
null
、random
、urandom
およびzero
などのキャラクタ・デバイスは、物理ハードウェアではなくソフトウェアに実装された仮想機能にアクセスできる擬似デバイスの例です。
/dev/null
はデータ・シンクです。/dev/null
に書き込むデータは実質的に消去されますが、書込み操作は成功します。/dev/null
から読み込むとEOF
(end-of-file)が返されます。
/dev/zero
は無制限の0値バイトのデータ・ソースです。
/dev/random
および/dev/urandom
は、擬似ランダム・バイトのストリームのデータ・ソースです。高エントロピの出力を維持するために、エントロピ・プールにノイズの十分なビットが含まれない場合は/dev/random
がブロックされます。/dev/urandom
はブロックされないため、その出力のエントロピは/dev/random
のエントロピほど一貫して高くありません。ただし、/dev/random
と/dev/urandom
はいずれも、ミリタリーグレードの暗号化のようなセキュアな暗号化という目的に対してランダムであるとはみなされません。
エントロピ・プールのサイズ、および/dev/random
のエントロピ値は、/proc/sys/kernel/random
下の仮想ファイルから検出できます。
cat /proc/sys/kernel/random/poolsize
4096
cat /proc/sys/kernel/random/entropy_avail
3467
詳細は、null(4)
、pts(4)
およびrandom(4)
の各マニュアル・ページを参照してください。