このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:/dev/null

/dev/null

 Linuxではリダイレクト先として頻繁に使用される特殊なファイルである /dev/null が存在します。このファイルを利用することで、コマンドの入出力を効率的に制御することが可能です。ここでは、/dev/null の性質と具体的な活用方法について詳しく解説します。

/dev/null とは

/dev/null は、スペシャルファイルと呼ばれる特別なファイルで、以下のような特徴を持っています。

  • 入力先として指定すると、何も内容を返さない(空の入力)。
  • 出力先として指定すると、書き込んだデータはすべて破棄される(どこにも保存されない)。

 この性質から、/dev/null は「ブラックホール」や「ビットバケツ」とも呼ばれ、データを捨てるためのデバイスとして機能します。

/dev/null ファイルの確認

お使いのシステムに /dev/null が存在することを確認してみましょう。

user01@ubuntu:~$ ls -l /dev/null
crw-rw-rw- 1 root root 1, 3 10月 27 13:54 /dev/null
  • ファイルタイプ:先頭の c はキャラクタデバイスファイルであることを示しています。

/dev/null の活用方法

1.標準入力を空にする

 /dev/null標準入力 にリダイレクトすると、入力が何もない状態になります。これは、コマンドのテストなどで入力を空にしたい場合に有用です。

例:cat コマンドで標準入力を空にする

user01@ubuntu:~$ cat < /dev/null
user01@ubuntu:~$
  • 解説cat コマンドは標準入力からデータを読み取りますが、/dev/null は何も返さないため、何も表示されずに終了します。

2.標準出力を捨てる

 /dev/null標準出力 のリダイレクト先に指定すると、コマンドの出力がすべて破棄され、画面には何も表示されなくなります。

例:cat コマンドの出力を捨てる

user01@ubuntu:~$ cat /etc/crontab > /dev/null
user01@ubuntu:~$
  • 解説:通常であれば /etc/crontab の内容が表示されますが、/dev/null にリダイレクトすることで出力が破棄されます。

3.エラーメッセージだけを表示する

 コマンドの出力が大量にある場合、エラーメッセージだけを確認したいことがあります。その場合、標準出力を /dev/null にリダイレクトすることで、標準エラー出力のみが画面に表示されます。

例:ls コマンドで存在しないディレクトリを指定

user01@ubuntu:~$ ls / /non_exist_dir > /dev/null
ls: '/non_exist_dir' にアクセスできません: そのようなファイルやディレクトリはありません

コマンドの意味を解説

ls / /non_exist_dir > /dev/null
  • ls / /non_exist_dir:ルートディレクトリ / と存在しないディレクトリ /non_exist_dir の内容をリストしようとしています。
  • > /dev/null:標準出力を /dev/null にリダイレクトし、出力を破棄します。
  • 結果:ルートディレクトリの内容は表示されず、存在しないディレクトリに対するエラーメッセージだけが表示されます。

4.エラーメッセージを非表示にする

 逆に、エラーメッセージを非表示にしたい場合は、標準エラー出力を /dev/null にリダイレクトします。これにより、標準出力のみが画面に表示されます。

例:エラーメッセージを捨てる

user01@ubuntu:~$ ls / /non_exist_dir 2> /dev/null
/:
bin                home               mnt   sbin.usr-is-merged  usr
bin.usr-is-merged  lib                opt   snap                var
boot               lib.usr-is-merged  proc  srv
cdrom              lib64              root  swap.img
dev                lost+found         run   sys
etc                media              sbin  tmp
  • 2> /dev/null:標準エラー出力(ファイルディスクリプター2)を /dev/null にリダイレクトします。
  • 結果:エラーメッセージは表示されず、ルートディレクトリの内容のみが表示されます。

5.標準出力と標準エラー出力を両方とも捨てる

 標準出力と標準エラー出力の両方を /dev/null にリダイレクトすると、画面には何も表示されなくなります。

例:全ての出力を捨てる

user01@ubuntu:~$ ls /non_exist_dir > /dev/null 2>&1
user01@ubuntu:~$
  • > /dev/null:標準出力を /dev/null にリダイレクト。
  • 2>&1:標準エラー出力を標準出力と同じ場所にリダイレクト。
  • 結果:すべての出力が /dev/null に捨てられ、画面には何も表示されません。

活用例

  • 不要なメッセージを非表示にしたい場合。
  • コマンドの実行時間を計測する際に、出力を抑制したい場合。

まとめ

  • /dev/null は、データを破棄するための特殊なファイルであり、入力・出力の両方で活用できます。
  • 主な特徴
    ・入力先として指定すると、何も返さない(空の入力)。
    ・出力先として指定すると、書き込んだデータはすべて破棄される。
  • 活用方法
    ・標準入力を空にする:コマンド < /dev/null
    ・標準出力を捨てる:コマンド > /dev/null
    ・エラーメッセージだけを表示:コマンド > /dev/null
    ・エラーメッセージを非表示にする:コマンド 2> /dev/null
    ・全ての出力を捨てる:コマンド > /dev/null 2>&1

 これらの方法を活用することで、コマンドの出力を柔軟に制御でき、作業効率を向上させることができます。特に、ログの整理や不要なメッセージの抑制など、システム運用において有用なテクニックです。ぜひ日々の業務で活用してみてください。