Man On a Mission

システム運用屋が、日々のあれこれを記録していくブログです。情報処理技術者試験の話題多し。高度試験の攻略なども。最近はやや歴史づいてます…。

【Linux】擬似デバイス null・zero・full

前回記事にて、擬似デバイス/dev/randomおよび/dev/urandomについて書きました。

oplern.hatenablog.com

せっかくなので(何が?)今回はその他の擬似デバイスについて取り上げます。
具体的には、/dev/null、/dev/zero、/dev/fullについて。

 /dev/null

/dev/nullは、何も出力しない擬似デバイスファイルです。
例えば、ddコマンドで/dev/nullを入力元にしてファイルを作成すると、サイズ0のファイルが出来上がります。

$ dd if=/dev/null of=imagefile

これは、/dev/nullから読み出しを行うと「EOF」(End Of File)が返されるからです。

また、/dev/nullへの書き込みは、全て無視されます。
(ステータスは成功となり、書き込まれたサイズが返り値となります。)

/dev/nullのポピュラーな使い方は、上記挙動を利用した、コマンド実行時のメッセージ出力抑止です。
例えば、シェルスクリプトなどでのコマンド実行時、エラーメッセージを画面に表示したくないことがあります。その場合、以下のようにしてエラーメッセージを捨てます。

command 2> /dev/null

ちなみに、標準出力も捨てたい場合は、以下のようにします。

command > /dev/null 2>&1

/dev/zero

/dev/zeroは、ヌル文字(\0)を出力する擬似デバイスです。
/dev/zeroから読み取りを行うと、延々\0を吐き出します。典型的な利用ケースとしては、データが全て\0のファイルを作成したり、HDDの内容消去などが挙げられます。
なお、上記の利用ケースは、ddコマンドと組み合わせて使います。

データが全てヌル文字の、100MBのファイルを作成する
$ dd if=/dev/zero of=dummydata bs=100M count=1
HDDの内容を消去する(全てヌル文字で埋める)
$ dd if=/dev/zero of=/dev/sdd

ちなみに、/dev/zeroに書き込みを行うと、/dev/nullと同様に書き込まれたデータは無視されます。

/dev/full

読み出しについては、/dev/zeroと同じです。
/dev/fullに対して書き込みを行うと、ENOSPCエラーとなり失敗します。
(ENOSPC:No space left on device デバイスに空き領域がありません。)

/dev/fullはディスクの空き容量がない状態を模倣する擬似デバイスファイルです。
ソフトウェアの動作チェックなどで利用します。

/dev/random と /dev/urandom

/dev/random と /dev/urandomについては、前回記事をご参照ください。