【tee】Linuxで標準入力を標準出力とファイルに書き出すコマンド

teeコマンドは標準入力と標準出力とファイルに書き出すコマンドです。

teeコマンドの使い方

teeコマンドの書式は以下の通りです。

tee [オプション] [ファイル...]

teeコマンドは指定したファイルに標準入力を書き込みます。もし指定したファイルが存在しない場合は、新規にファイルを作成し書き込みを行いますが、既に指定したファイルが存在する場合は、上書きします。

オプション

-a 上書きではなくファイルに追記する
-i SIGINTシグナルを無視する

標準出力をファイルに保存する

標準出力をファイルに保存する場合は、パイプ「|」を利用して、teeコマンドに標準入力として渡します。

$ echo "Hello World" | tee a.txt
Hello World
$ cat a.txt 
Hello World

この例では、a.txtというファイルに「Hello World」が書き込まれます。

標準入力をファイルに保存する

teeコマンドを実行すると入力が求められるので、書き込みたい文字列を入力します。書き込みを終了する場合は、「Ctrl+D」を入力します。

以下は、teeコマンドを実行し「Hello World」と入力した例です。

$ tee a.txt
Hello World
Hello World
$ cat a.txt
Hello World

改行を入力すると、入力した文字列が端末画面に表示されます。a.txtの中身を表示すると「Hello World」が書き込まれていることが確認できます。

ファイルに追記する

「-a」オプションを付けると指定したファイルが存在する場合、上書きではなく追記を行います。

$ echo "Hello World" | tee a.txt
Hello World
$ echo "Hello World" | tee -a a.txt
Hello World
$ cat a.txt 
Hello World
Hello World

標準エラー出力もファイルに保存する

パイプを使用した場合、標準エラー出力は指定したコマンドに渡されません。

以下の例は、pingコマンドの引数に存在しないホスト名「host999」を指定して、エラーを発生させた例です。

$ ping -c 4 host999 | tee pinglog.txt
ping: unknown host host999
$ cat pinglog.txt

catコマンドでファイルを確認しても、「ping: unknown host host999」は標準エラー出力であるためファイルには何も書き込まれていません。

標準エラー出力も保存したい場合は「2>&1」を指定することで、標準出力と標準エラー出力の両方をteeコマンドの標準入力に渡すことができます。

$  ping host1234 2>&1 | tee pinglog.txt
ping: unknown host host1234
$ cat pinglog.txt 
ping: unknown host host1234

イベント