標準入力と標準出力とリダイレクト

はじめに

こんにちは、こうへいです。最近、シェルスクリプトでログを作成していたところ、標準入力と標準エラーに学ぶ機会があったため、書いていきたいと思います。また、今回は、VMware ESXi6.7 上の仮想マシンにcentos8をインストールした環境を使用しました。

標準入力、標準出力とは

標準入力とは、プログラムの標準的な入力のことで、通常はキーボードでの入力のことを言います。次に標準出力とは、通常はディスプレイへの出力のことをいいます。出力には、標準出力の他に標準エラーがあります。

標準エラーは、標準出力と同じく基本的にはディスプレイに出力されるのは、変わりはありません。標準出力と異なるところは、プログラムのエラーが出力されるところです。標準入力と標準出力という難しい言い回しをしていますが、わかりやすいイメージでいえば、キーボードで入力したものが、画面に出力されることです。

基本的に標準入力は、通常キーボードで入力し、標準出力は、ディスプレイに出力すると書きましたが、標準入力と標準出力は切り替えることが可能です。

例えば、標準入力をキーボードからファイルに、標準出力をファイルに切り替えることが可能です。このように標準入力や標準出力を切り替えることをリダイレクトといいます。

リダイレクトについて

リダイレクトとは、標準入力、標準出力、標準エラーの入力先、出力先を変更することです。ここでは、主に標準出力と標準エラーについて書きます。また、標準出力をリダイレクトする際の活用はログの出力などがあります。

記号 内容
コマンド < ファイル 標準入力をファイルに変更
コマンド > ファイル  標準出力をファイルに変更
コマンド >> ファイル 標準出力をファイルに変更しファイルの末尾に追加
コマンド 2> ファイル 標準エラーを出力
コマンド 2>> ファイル 標準エラーを出力しファイルの末尾に追加
コマンド > ファイル 2>&1 標準出力と標準エラーを共にファイルに出力

上記の表のような記号を用いることでリダイレクトすることが可能です。また、標準出力と標準エラーを別々のファイルにリダイレクトすることができます。

コマンド > standard_output.log 2> error_output_logで標準出力は、standard_output.logに出力され、標準エラーが出力された場合は、error_output.logに出力されます。標準出力と標準エラーで書き込むファイルを分けることが可能で便利です。

種類 数値
標準入力  0
標準出力 1
標準エラー 2

コマンド > standard_output.log 2> error_output_logにおける2>の意味ですが標準エラーを指定のファイルにリダイレクトするということです。2以外も数値があります。0の場合は標準入力1の場合は、標準出力で省略可能です。これらの数値のことをファイルディスクリプタといいます。

また、echoコマンドを使用すると通常メッセージは、標準出力に出力されます。echoを用いて独自の標準エラーを出力する場合、標準出力から標準出力にリダイレクトさせます。標準出力を標準エラーにリダイレクトするには、echo "メッセージ" 1>&2 と記述すると標準エラーにリダイレクトができます。

まとめ

今回はリダイレクトを用いてログ出力について書いてきました。はじめてログの出力をシェルスクリプトでログを書いてわからない事が多かったですが、学ぶことが多かったです。ブログには、はじめて勉強したことも積極的に書いていきたいと思っています。今日はここで失礼します。

参考文献

SB クリエイティブ株式会社 三宅英明・大角祐介 新しいLinuxの教科書

ソフトバンクパブリッシング株式会社 ブルース・ブリン 入門UNIXシェルプログラミング 改訂第二版

kohei-iwamoto-wa