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]#