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

Linuxコマンドの基本:標準エラー出力と標準エラー出力のリダイレクト

標準エラー出力と標準エラー出力のリダイレクト

 Linuxのコマンドライン操作では、プログラムの出力は大きく3つのチャネルに分けられます。標準入力(stdin)標準出力(stdout)、そして標準エラー出力(stderr)です。ここでは、特に標準エラー出力とそのリダイレクトについて詳しく解説します。

標準エラー出力とは

 標準エラー出力(stderr)は、プログラムがエラーメッセージを出力するための専用の出力チャネルです。通常、標準出力と同じく端末ディスプレイに接続されています。しかし、標準出力と標準エラー出力は別々のチャネルであり、個別に制御することが可能です。

エラーメッセージの例

 例えば、lsコマンドで存在しないファイルを指定すると、次のようなエラーメッセージが表示されます。このメッセージは標準エラー出力に出力されています。

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

標準エラー出力の特徴

  • デフォルトの出力先:標準エラー出力は、標準出力と同様に端末ディスプレイに接続されています。
  • 標準出力との違い:標準出力と標準エラー出力は別々のチャネルであり、リダイレクトなどで個別に制御できます。

標準出力と標準エラー出力の関係

標準エラー出力のリダイレクト

標準エラー出力も、標準出力と同様にリダイレクトして別の出力先に変更することができます。

標準出力をファイルにリダイレクトした場合

標準出力をファイルにリダイレクトしても、標準エラー出力は端末ディスプレイに表示されます。

例:標準出力をlist.txtにリダイレクト

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

解説

  • コマンド ls non_exist.txt > list.txt は、標準出力を list.txt にリダイレクトしています。
  • エラーメッセージは標準エラー出力から端末ディスプレイに表示されます。
  • list.txt は空のままです。

標準エラー出力をファイルにリダイレクトする方法

 標準エラー出力をリダイレクトするには、2> という記号を使用します。2 はファイルディスクリプター番号で、標準エラー出力を示します。

【書式】
[コマンド] 2> [ファイル]

例:エラーメッセージを error.txt に保存

user01@ubuntu:~$ ls non_exist.txt 2> error.txt
user01@ubuntu:~$ cat error.txt
ls: 'non_exist.txt' にアクセスできません: そのようなファイルやディレクトリはありません

解説

エラーメッセージが error.txt にリダイレクトされ、端末ディスプレイには表示されません。

標準出力と標準エラー出力を同時にリダイレクト

標準出力と標準エラー出力をそれぞれ別のファイルにリダイレクトすることも可能です。

例:標準出力を list.txt に、標準エラー出力を error.txt にリダイレクト

user01@ubuntu:~$ ls non_exist.txt > list.txt 2> error.txt
user01@ubuntu:~$ cat list.txt
user01@ubuntu:~$ cat error.txt
ls: 'non_exist.txt' にアクセスできません: そのようなファイルやディレクトリはありません

解説

  • 標準出力(コマンドの実行結果)は list.txt に保存されますが、この場合は内容がないため空です。
  • エラーメッセージは error.txt に保存されます。
  • 端末ディスプレイには何も表示されません。

リダイレクト記号のまとめ

リダイレクト記号対象説明
>標準出力(stdout)標準出力を指定したファイルにリダイレクト
2>標準エラー出力(stderr)標準エラー出力を指定したファイルにリダイレクト
リダイレクト記号のまとめ

不要なファイルの削除

作成したリダイレクト先のファイルが不要になった場合は、rm コマンドで削除できます。

user01@ubuntu:~$ rm list.txt error.txt
user01@ubuntu:~$ ls
snap  ダウンロード  デスクトップ  ビデオ  ミュージック
work  テンプレート  ドキュメント  ピクチャ  公開

まとめ

  • 標準エラー出力(stderr) は、エラーメッセージを出力するための専用チャネルであり、標準出力(stdout)とは別に扱われます。
  • 標準出力をファイルにリダイレクトしても、標準エラー出力は引き続き端末ディスプレイに表示されるため、エラーメッセージを見逃さずに済みます。
  • 2> を使用することで、標準エラー出力をファイルにリダイレクトできます。
  • 標準出力と標準エラー出力を同時にリダイレクトすることで、出力結果とエラーメッセージを別々に管理できます。
  • リダイレクトを活用することで、コマンドの実行結果を効率的に保存・解析することが可能になります。

 このように、標準エラー出力とそのリダイレクトを理解することで、Linuxコマンドの出力管理がより柔軟に行えるようになります。エラーメッセージのログを残したり、出力を整理したりする際にぜひ活用してみてください。