【Linux】/dev/nullをエンジニアが使う2つの目的

Linuxコマンドを勉強したい人向け シェル/bash

/dev/nullについて調べる人

/dev/nullについて調べる人
「/dev/nullについて調べています。特殊なファイルみたいですけど、これは何ですか?また、/dev/nullはどんな時に何の目的で使うのでしょうか?例を示しながら、わかりやすく教えてください。」

こんな悩みを解決します。

この記事を書いている私はIT業界歴12年、うちサーバエンジニア歴6年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやmac、Linuxなど様々なUNIX系環境を扱ってきました。

これまでの経験を踏まえ、コマンドの解説に留まらず実務視点で利用方法を記事にしました。お役にたちましたら幸いです。

本記事ではLinux/Macの環境を前提にしています

本記事では、LinuxまたはMac環境を前提にしています。それ以外のUNIX環境では一部の動作が異なることがあります。

本記事の内容

/dev/nullとは

/dev/nullはLinuxにおいて特別なファイルです。/dev/nullとは何か、以下Wikipediaより引用します。

/dev/null(nullデバイスとも呼ばれる)は、UNIXやUnix系オペレーティングシステム (OS) におけるスペシャルファイルの1つで、そこに書き込まれたデータを全て捨て(writeシステムコールは成功する)、読み出してもどんなプロセスに対してもデータを返さない(EOFを返す)。DOSやWindowsではこれとほぼ同等な機能を提供するNULデバイスがある。

/dev/nullを実機で確認

まずはスペシャルファイルである/dev/nullに対して、lsコマンドとmvコマンドを試します。

$ ls -l /dev/null
crw-rw-rw-  1 root  wheel    3,   2  7 31 18:50 /dev/
$ mv /dev/null /tmp/
mv: rename /dev/null to /tmp/null: Operation not permitted

lsで属性を確認すると先頭にcが付いています。cはスペシャルファイルを示し、デバイスファイルには基本的にcが付きます。また、mvでファイルを移動することはできません。

/dev/nullの使用例

/dev/nullはゴミ箱に例える人もいますが、強いて言えばブラックホールのようなイメージで、なんでも吸い込んで「無」にしてしまいます。

例1:標準出力の抑止

echoした"Hello"の文字は/dev/nullに渡されると、何もどこにも出力しません。

$ echo "Hello" > /dev/null

例2:標準エラー出力の抑止

標準エラー出力(2>)を渡した場合も同様に、エラーメッセージがどこにも出力されません。

$ grep XXX file1.txt
No such file or directory
$ grep XXX file1.txt 2> /dev/null
              ←何も表示されない

/dev/nullを使う目的①
不要なメッセージ出力を抑止したい

ここからエンジニアが実務で/dev/nullを使う目的について解説します。

まず、例1,2に示したように標準出力/標準エラー出力を抑止する目的で使います。大量に見る価値のないエラー文言が出力される場合、特にリターンコードだけを確認すれば済むようなケースには有用です。また、膨大なメッセージ出力によってI/O負荷がかかる場合にも有用です。

このように、一時的にメッセージ抑止したい場合のテクニックとして使われます。

/dev/nullを使う目的②
ファイルの中身を強制的に空にしたい

ファイルの中身を強制的に空にする場合にも/dev/nullは使われます。

$ cat /dev/null > file1.txt

もしくは、次のように記述することもできます。

$ cp -i /dev/null file2.txt

いずれの方法でもファイルの内容を強制的に空に置き換えることができます(=★ファイルサイズが0バイトになっている)。

ls -rlt file*.txt
-rw-r--r--  1 root  staff  0★  7 31 19:10 file1.txt
-rw-r--r--  1 root  staff  0★  7 31 19:10 file2.txt

おわりに

今回は以上です。大きく2点、(1)/dev/nullとは何か、(2)エンジニアが/dev/nullを使う目的について解説しました。/dev/nullについての理解の一助になりましたら幸いです。

Blog TOP  Linuxコマンドを勉強したい人向け|Linuxの使い方 記事まとめ

Linux&Linuxコマンドを勉強したい人向けの記事もくじ

用語解説・技術一般

  "UNIXとLINUX"の違いについて解説します
  CUIとGUIの違い・特徴について解説します

サーバリソースを確認するコマンドの使い方

  【Linux】CPU使用率を確認する3つの方法を解説します
  【Linux】topコマンドで,CPU消費の原因を特定する方法
  【Linux】ps実行時に-efオプションを付ける理由について
  【Linux】メモリ使用率を確認する|容量・空きの確認も
  【Linux】ディスク容量を確認する|ディスク容量監視も

ファイル操作に関するコマンドの使い方

  【Linux】ファイルの行数をカウントする方法を解説
  【Linux】文字コード変換ならiconvコマンド1択です
  【Linux】/dev/nullを、エンジニアが使う2つの目的
  【Linux】findのexecオプションの使い方とその注意点
  【Linux】findの結果から圧縮ファイルを作るコマンド
  【Linux】hostsの場所はどこ?→/etc/hostsにあります
  【Linux】touchコマンドで,時刻更新&空ファイル作成

Linux管理者用コマンドの使い方

  【Linux】再起動コマンド(shutdown)の使い方と注意点

よく使う便利なコマンドの使い方

  【Linux】改行なしでechoコマンドを使う時の -nオプション
  【Linux】sleepコマンドの使用例と注意点について解説する
  【Linux】rmコマンドでディレクトリを削除する方法を解説
  【Linux】ファイルを削除するコマンド2選【rm以外もあり】
  【Linux】awkの区切り文字を指定する,-Fオプションを解説
  【Linux】sedで文字列の置換をするeオプションを解説する
  【Linux】dateコマンドのフォーマットとその便利な使い方
  【Linux】大文字から小文字に変換する方法【小文字から大文字も】

シェルの便利機能

  【Linux】コマンド履歴を検索する【Ctrl+r】