Linux環境では、コマンドの入出力は以下の3種類で構成されており、コマンドはキーボードから入力(標準入力)を受け付けて、実行結果やエラーは画面に出力(標準出力・標準エラー出力)されます。
- 標準入力(0):キーボード
- 標準出力(1):画面
- 標準エラー出力(2):画面
ですが、コマンドの実行結果をファイルに出力したり、ファイルの内容をコマンドの入力元にしたりなど、入力元や出力先を変更したいときがあります。そのようなときは、リダイレクトやパイプを利用します。
そこでここでは、リダイレクトやパイプを使って、コマンドの入力元や出力先を変更する方法を紹介します。
目次
リダイレクト
リダイレクトは、コマンドの入力元や出力先を変更できる機能で、ファイルの内容をコマンドの入力元として指定したり、コマンドの実行結果をファイルに出力したりできます。
リダイレクトには、次のような種類があります。
コマンド | 説明 |
---|---|
コマンド > ファイル | コマンドの実行結果をファイルに出力する |
コマンド < ファイル | ファイルの内容をコマンドに入力する |
コマンド >> ファイル | コマンドの実行結果をファイルに追記する |
コマンド 2> ファイル | コマンドのエラーをファイルに出力する |
コマンド 2>> ファイル | コマンドのエラーをファイルに追記する |
コマンド > ファイル 2>&1 | コマンドの実行結果やエラーをファイルに出力する |
コマンド >> ファイル 2>&1 | コマンドの実行結果やエラーをファイルに追記する |
パイプ
コマンドの実行結果(標準出力)を別のコマンドの標準入力としたいときは、パイプを利用します。
たとえば、コマンド1の標準出力をコマンド2の標準入力としたいときは、次にように実行します。
# コマンド1 | コマンド2
また、パイプは複数つなげるすることもでき、次のような使い方もできます。
# コマンド1 | コマンド2 | コマンド3
画面とファイルの両方に出力するには
リダイレクトを利用すると、入力元や出力先にファイルなどを指定できますが、ときには画面とファイルの両方に出力したいときがあります。
そのような時は、パイプとteeコマンドを利用します。
たとえば、コマンドやスクリプトの実行結果を、画面とファイルの両方に出力したいときは、次のように実行します。
# コマンド | tee ファイル
コマンドやスクリプトの実行結果を、画面とファイルの両方に出力したいときは、次のように実行します。
# コマンド | tee -a ファイル
コマンドやスクリプトの実行結果を、エラーも含めて画面とファイルの両方に出力したいときは、次のように実行します。
# コマンド 2>&1 | tee ファイル
コマンドやスクリプトの実行結果を画面と複数のファイルに出力することもできます。
# コマンド | tee ファイル1 ファイル2
あとがき
なお、未確認情報ですが、teeコマンドを使って大容量のデータをファイルに出力すると、リダイレクトに比べて遅いらしいので、大容量のファイルを処理する場合は注意が必要かもしれません。