mknodコマンドは特殊ファイル(special file)を作成するコマンドになります。
特殊ファイルの例として、/dev/nullのようなデバイスファイルがあります。mknodコマンドはこのような特殊ファイルを作成することができます。
mknodコマンドの構文
mknodコマンドの基本的な構文
1 |
mknod name type [major minor] |
name:ファイル名
type:
typeの種類
記号 | 種類 |
b | ブロック型特殊ファイル(block special file) |
c | 文字型特殊ファイル(character special file) |
p | パイプ(pipe) |
major:メジャーデバイス番号
minor:マイナーデバイス番号
デバイスファイル
例えば、/dev/nullのようなデバイスファイルを確認してみます。
1 2 |
$ls -l /dev/null crw-rw-rw- 1 root root 1, 3 11月 16 12:26 /dev/null |
所有者とグループの後にカンマで区切られた数字があります。これは、メジャーデバイス番号とマイナーデバイス番号を表します。
メジャーデバイス番号は、メモリーデバイス(Memory devices)やRAMディスク(RAM disk)、フロッピーディスク(Floppy disks)、キーボードデバイス(Raw keyboard device)のような大きなクラスを表します。
マイナーデバイス番号は、そのメジャーデバイス番号のクラスからの具体的なデバイスについての番号を表します。
規定されているデバイスリストはThe Linux Kernel documentationのLinux allocated devicesを参考にすることができます。例えば、文字型でのメジャーデバイス番号1は以下のように参照することができます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
1 char Memory devices 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 |
文字型でのメジャーデバイス番号の1、マイナーデバイス番号の3は/dev/nullであると参照できます。
また、文字型特殊ファイルは、キーボードやマウス、プリンタ、ディスプレイ等のデバイスが対象であり、入出力が行われたら、即時に動作を行うようなデバイスに対してのファイルになります。
一方で、ブロック型特殊ファイルは、ディスクなどのデバイスが対象であり、ブロック単位の入出力で、データのバッファを使用するデバイスに対してのファイルになります。
mknodコマンドの利用例
特殊ファイルの作成
/dev/zeroはデバイスリストより、文字型でメジャーデバイス番号が1、マイナーデバイス番号が5になります。これをmknodコマンドで作成すると/dev/zeroと同じような特殊ファイルを作成することができます。
コマンド例
1 |
sudo mknod devzero c 1 5 |
実行結果
1 2 3 |
$ls -l 合計 0 crw-r--r-- 1 root root 1, 5 11月 16 21:49 devzero |
また、bの場合はブロック型特殊ファイルを表します。
パイプの作成
mknodコマンドでtypeにpを指定すると名前付きパイプを作成することができます。名前付きパイプはmkfifoコマンドで作成することも可能です。
コマンド例
1 |
mknod namedpipe p |
実行結果
1 2 |
$ls -l namedpipe prw-rw-r-- 1 ubuntu ubuntu 0 11月 16 22:05 namedpipe |
ファイル作成時にアクセス権限を設定
(-mオプション)
-mオプションを用いるとアクセス権限が設定された状態で作成できます。コマンド例では、すべてのユーザが読み込みと書き込み権限をつけます。
コマンド例
1 |
sudo mknod -m 666 devzero c 1 5 |
または
1 |
sudo mknod -m 'a=rw' devzero c 1 5 |
実行結果
1 2 |
$ls -l devzero crw-rw-rw- 1 root root 1, 5 11月 16 22:11 devzero |
参考
GNU Coreutils: mknod invocation