Linux - Redirect / Pipe / tee



 ◆ 標準入力、標準出力、標準エラー出力

 Linuxのコマンドは、標準入力、標準出力、標準エラー出力を処理するように作成されています。

入出力名 番号 デフォルト 意味
標準入力 0 キーボード データ入力元
標準出力 1 端末画面 データ出力先
標準エラー出力 2 端末画面 エラー出力先



   



 ◆ リダイレクトとパイプの概要

 入出力はコマンド実行時に切り替えられ、コマンドの入出力をファイルに切り替える機能は
リダイレクト
 と言います。コマンドの出力結果を別のコマンドの標準入力に渡すことができる機能は
パイプと言います。


     




 ◆ リダイレクト

 コマンドの入力は、キーボードが使用されて、そのコマンドの実行結果はディスプレイ上に表示されます。
 しかし、リダイレクトを使用することでコマンドの実行結果を画面上ではなくファイルに保存することが
 できます。※ コマンドへの入力に用意しておいたファイルを使用する場合にもリダイレクトが役立ちます。

 リダイレクトには大きく6種類があります。

リダイレクト 説明
>  出力のリダイレクト
>>  出力をファイルに追記
<  入力のリダイレクト
<<  入力終端文字の指定
2>  エラー出力をファイルに設定し、コマンドを実行
2>&1  標準出力とエラー出力をファイルに設定し、コマンドを実行


 リダイレクトを使用した具体的な書式は以下の通りです。

書式 説明
 コマンド > ファイル  コマンドの「標準出力」をファイルに書き込む
 コマンド < ファイル  ファイルの内容をコマンドの「標準入力」へ送る
 コマンド >> ファイル  コマンドの「標準出力」をファイルに追記する
 コマンド 2> ファイル  ファイルに「エラー出力」を書き込む
 コマンド 2>> ファイル  ファイルに「エラー出力」を追記する
 コマンド > ファイル 2>&1  ファイルに「標準出力」と「エラー出力」を書き込む
 コマンド >> ファイル 2>&1  ファイルに「標準出力」と「エラー出力」を追記する
 コマンド &> ファイル  ファイルに「標準出力」と「エラー出力」を同じファイルに書き込む
 コマンド << 終了文字  終了文字が現れるまで「標準入力」へ送る



    



 ◆ 実行例 : lsコマンドの実行結果を test.log ファイルに保存
 $ ls -l > test.log
 ※ test.log というファイルがない場合、新たにこのファイルが作成されます。


 ◆ 実行例 : lsコマンドの実行結果を test.log ファイルの末尾に追加
 $ ls -l >> test.log


 ◆ 実行例 : temp.log のファイルから「 LinuC 」という文字列を検索
 $ grep "LinuC" < temp.log


 ◆ 実行例 : temp.log のファイルから「LinuC」という文字列を検索して、実行結果を「result.log」に書き込む
 $ grep "LinuC" < temp.log > result.log


 ◆ 実行例 : startxコマンドの出力するエラーを「error.log」に保存
 $ startx 2> error.log


 ◆ パイプ

 パイプとは、コマンドの出力結果を別のコマンドの標準入力に渡すことができる機能で記号で
| と表現。
 例えば、manコマンドでマニュアル参照時に「remove」というキーワードに部分合致する情報を表示
 させたい場合、man -k remove と入力すると、一度に全ての情報が表示されて1画面に収まらず全てを
 確認できませんが、コマンド結果をパイプコマンドで引き渡しmoreで表示すれば1画面で表示できます。


   


 $ man -k remove | more

書式 説明
 コマンド1 | コマンド2  コマンド1 の「標準出力」をコマンド2 の「標準入力」に引き渡す
 コマンド1 2>&1 | コマンド2  コマンド1 の「標準出力」と「エラー出力」をコマンド2 の標準入力に引き渡す
 コマンド1 | tee ファイル | コマンド2  コマンド1 の「標準出力」をファイルに書き込み、コマンド2 の「標準入力」に渡す




 ◆ teeコマンド

 teeは、標準入力から読み込んでファイルに書き込み、次のコマンドへ実行結果を引き渡せられます。

 ◆ 構文 : tee [ オプション ] ファイル名

オプション 説明
-a  ファイルへの上書きではなく、追記。


 ◆ 実行例 : ls -l の出力結果を data.txt のファイルに書き込み、ls -l の出力結果を画面に出力
 $ ls -l | tee data.txt



   



 ※ 標準出力する際にmoreで表示させたい場合は
ls -l | tee data.txt | more と入力すればOKです。



Linux 技術入門

Copyright(C) 2002-2024 ネットワークエンジニアとして All Rights Reserved