Linuxコマンド辞典 mknodコマンド(デバイス)
スペシャルファイルを作成する「mknod」コマンドの概要と使い方を記載しています。
RHEL Fedora CentOS Vine Ubuntu Plamo
概要・使用方法
書式
$ mknod [オプション] ファイル名 タイプ [メジャー番号 マイナー番号]
スペシャルファイルを作成します。UNIXでは、ハードウェアデバイスをスペシャルファイルという特殊なファイルとして扱う特徴があります。例えばSATAやSAは/dev/sdaになります。
スペシャルファイルの確認
[rin@localhost ~]$ ls -l /dev/sda1
brw-rw----. 1 root disk 8, 1 11月 9 06:03 /dev/sda1
[rin@localhost ~]$ ls -l /dev/pts/0
crw--w----. 1 rin tty 136, 0 11月 9 07:12 /dev/pts/0
[rin@localhost ~]$
lsの結果でパーミッションを表す「brw-rw」の先頭が「b」や「c」になっています。これはブロック型のスペシャルファイルを表します。スペシャルファイルにはブロック型(b)/キャラクタ型(c)/アンバッファキャラクタ型(u)/名前付きパイプ(c)などがあります。
mknodには、スペシャルファイルの型(タイプ)とメジャー番号、マイナー番号を指定します。メジャー番号はデバイスの種類を指し、/usr/include/linux/major.hに定義されています。マイナー番号はそのデバイスを動かすドライバ内で管理するIDです。例えば、HPのSmart Arrayのストレージデバイスを確認すると、104がメジャー番号、1がマイナー番号になります。
/usr/include/linux/major.h例
[rin@localhost work]$ cat /usr/include/linux/major.h | grep COMPAQ
#define COMPAQ_SMART2_MAJOR 72
#define COMPAQ_SMART2_MAJOR1 73
#define COMPAQ_SMART2_MAJOR2 74
#define COMPAQ_SMART2_MAJOR3 75
#define COMPAQ_SMART2_MAJOR4 76
#define COMPAQ_SMART2_MAJOR5 77
#define COMPAQ_SMART2_MAJOR6 78
#define COMPAQ_SMART2_MAJOR7 79
#define COMPAQ_CISS_MAJOR 104
#define COMPAQ_CISS_MAJOR1 105
#define COMPAQ_CISS_MAJOR2 106
#define COMPAQ_CISS_MAJOR3 107
#define COMPAQ_CISS_MAJOR4 108
#define COMPAQ_CISS_MAJOR5 109
#define COMPAQ_CISS_MAJOR6 110
#define COMPAQ_CISS_MAJOR7 111
[rin@localhost work]$
オプション
-m パーミッション –mode=パーミッション | パーミッションを指定する |
パイプファイルを作成する
$ mknod pipe pipe
実行結果
[rin@localhost work]$ mknod pire pire
[rin@localhost work]$ ls -l
合計 0
prw-rw-r--. 1 rin rin 0 11月 9 07:21 pire
[rin@localhost work]$
フロッピーで利用する/dev/fd0というスペシャルファイルを作成する
$ mknod パス ブロックデバイス メジャー番号 マイナー番号
実行結果
[root@localhost work]# mknod /dev/fd0 b 2 0
[root@localhost work]# ls -l /dev/|grep fd
lrwxrwxrwx. 1 root root 13 11月 9 06:03 fd -> /proc/self/fd
brw-r--r--. 1 root root 2, 0 11月 9 07:31 fd0
lrwxrwxrwx. 1 root root 15 11月 9 06:03 stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 11月 9 06:03 stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 11月 9 06:03 stdout -> /proc/self/fd/1
[root@localhost work]#
パーミッションを指定する方法
[root@localhost work]# mknod /dev/fd1 --mode=660 b 2 0
[root@localhost work]# ls -l /dev/|grep fd
lrwxrwxrwx. 1 root root 13 11月 9 06:03 fd -> /proc/self/fd
brw-r--r--. 1 root root 2, 0 11月 9 07:31 fd0
brw-rw----. 1 root root 2, 0 11月 9 07:46 fd1
lrwxrwxrwx. 1 root root 15 11月 9 06:03 stderr -> /proc/self/fd/2
lrwxrwxrwx. 1 root root 15 11月 9 06:03 stdin -> /proc/self/fd/0
lrwxrwxrwx. 1 root root 15 11月 9 06:03 stdout -> /proc/self/fd/1
[root@localhost work]#