Linuxサーバーのteeコマンドの具体的な使い方やオプションについて記述します。
コマンドの結果をファイルに書き込みする事は、リダイレクトでできますが、標準出力にも表示して確認したいといった事はないでしょうか?
またteeコマンドでエラーのメッセージが、ファイルに出力されないといって困ってはいないでしょうか?
Linuxのteeコマンドについて困っている人は、この記事を読めば解決できます。
筆者はWindowsサーバーやLinuxサーバーの運用構築を11年以上おこなってきました。その経験を元に知識を公開していきます!
Linuxサーバーのteeコマンドの使い方

teeコマンドの使い方
Linuxサーバーのteeコマンドの仕組みとしては、標準入力から受けとった文字列を標準出力(ディスプレイ)とファイルに記述する仕組みです。
Linuxサーバーのteeコマンドの使い方の基礎を以下に示しておきます。
コマンド | tee オプション ファイル名
コマンドの結果とエラー内容(エラーがあれば)を標準出力に表示します。それと結果のみ(エラーメッセージは含まない)ファイルに記述します。
結果とエラー内容のどちらも、標準出力とファイルに記述したい場合はリダイレクトを使用します。
コマンド 2>&1 | tee オプション ファイル名
実践:teeコマンドの使用例
では実際にteeコマンドを使用して、ディスプレイとファイルにコマンド結果とエラーメッセージが表示されるか確認します。
まずは「exist-file」ファイルを作成します。

touch exist-file
作成できたかlsコマンドで確認します。

[root@localhost ~]# ls | grep exist-file
exist-file
ファイルが作成されたことを確認できました。
ではlsコマンドでファイル名を表示した内容を、teeコマンドで確認します。
ls exist-file | tee tee.txt
teeコマンドで「tee.txt」ファイルに書き込みしてみます。
[root@localhost ~]# ls exist-file | tee tee.txt
exist-file
標準出力に結果が表示されています。ファイルに書き込みされているか確認します。
[root@localhost ~]# cat tee.txt
exist-file
コマンド結果が標準出力とファイルで確認できました!
では存在しないファイルを指定して、エラーを出してみます。
[root@localhost ~]# ls no-exist-file | tee tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
エラーメッセージが標準出力に表示されました。ファイルを確認してみます。
[root@localhost ~]# cat tee.txt
[root@localhost ~]#
エラーメッセージはファイルには記述されていません。
先程説明したようにエラーメッセージもファイルに記述したい場合はリダイレクトを使用します。
[root@localhost ~]# ls no-exist-file 2>&1 | tee tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
先程と同様にエラーメッセージが標準出力に表示されました。ファイルを確認してみます。
[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
コマンド結果がエラーでも、標準出力とファイルで確認できました!
teeコマンドのオプションについて

teeコマンドにもオプションがあるのでまとめておきます。
teeコマンドオプション | 効果 |
---|---|
-a | 上書きではなく追記する |
-i | 割り込みシグナルを無視する |
teeコマンドで上書きではなく追記する
デフォルトのteeコマンドではファイルは上書きしてしまいます。
今までのログを残したく追記したい場合はaオプションをつけましょう!
先程から「tee.txt」ファイルは上書きされていましたが、aオプションをつけてどうなるか確認します。
まずは現状の「tee.txt」ファイルの内容を確認しておきます。
[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
先程のメッセージが残っています。ではteeコマンドで表示とファイル追記してみます。
[root@localhost ~]# ls exist-file 2>&1 | tee -a tee.txt
exist-file
[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
ファイルに上書きではなく追記されている事がわかります。
エラーメッセージの方も試してみます。
[root@localhost ~]# ls no-exist-file 2>&1 | tee -a tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
エラーメッセージも上書きではなく、追記されています。
teeコマンドで複数のファイルに追記する方法

teeコマンドは複数のファイルに追記する事も可能です。
コマンド | tee ファイル名1 ファイル名2・・・
複数のファイルに追記したい場合は、ファイルをスペース区切りで指定していく事です。
では複数のファイルに追記していきます。
[root@localhost ~]# ls exist-file 2>&1 | tee -a tee.txt tee2.txt tee3.txt
exist-file
ファイルの内容を確認します。
[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
[root@localhost ~]# cat tee2.txt
exist-file
[root@localhost ~]# cat tee3.txt
exist-file
「tee.txt」ファイルにはコマンドの結果が末行に追記されています。その他複数のファイルにも追記されています。
エラーメッセージでも試してみます。
[root@localhost ~]# ls no-exist-file 2>&1 | tee -a tee.txt tee2.txt tee3.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
ファイルをそれぞれ確認します。
[root@localhost ~]# cat tee.txt
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
[root@localhost ~]# cat tee2.txt
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
[root@localhost ~]# cat tee3.txt
exist-file
ls: no-exist-file にアクセスできません: そのようなファイルやディレクトリはありません
全てのファイルの末行に、エラーメッセージが追記されています。
まとめ:Linuxのteeコマンドの使い方

Linuxサーバーのteeは、コマンドの結果を標準出力とファイルに記述できる。
teeコマンドの使い方の基礎を以下に示しておきます。
コマンド | tee オプション ファイル名
コマンドの結果がエラーの場合は、ファイルには書き込まれないので注意する。
エラーの場合も標準出力とファイルに記述したい場合は、「2>&1」とリダイレクトをつけます。
コマンド 2>&1 | tee オプション ファイル名
teeコマンドにもオプションがありました。
teeコマンドオプション | 効果 |
---|---|
-a | 上書きではなく追記する |
-i | 割り込みシグナルを無視する |
teeコマンドは複数のファイルに追記する事も可能でした。
コマンド | tee ファイル名1 ファイル名2・・・
コマンド 2>&1 | tee -a ファイル名