Linuxコマンド:コマンドの実行結果を画面とファイルの両方に出力する方法(tee)

コマンドやスクリプトの実行結果を、画面(標準出力)で確認しつつ、ファイルにも保存したいときがあります。ここでは、そのようなときに役立つ「tee」コマンドの基本的な使用方法について紹介します。

動作環境

この記事は、以下の環境で実行した結果を基にしています。他のディストリビューションやバージョンでは、動作結果が異なる場合があることをご了承ください。

cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)

書式とオプション

書式

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

主なオプション

オプション 説明
-a  ファイルに追記します。(既定は上書き)

使用例

ユーザーhogeでexample.comへssh接続した操作ログを「logfile.log」に保存するには

ssh hoge@example.com | tee -a logfile.log

スクリプト「sample.sh」の実行結果を、画面と「test.log」に出力するには

sample.sh | tee test.log

スクリプト「sample.sh」の実行結果を、画面に出力しつつ「test.log」に追記するには

sample.sh | tee -a test.log

スクリプト「sample.sh」の実行結果を、標準エラー出力も含めて、画面に出力しつつ、「test.log」にも書き込むには

sample.sh 2>&1 | tee test.log

「ls」コマンドの実行結果を、画面に出力しつつ「test1.txt」と「hoge2.txt」の複数のファイルに出力するには

ls | tee test1.txt test2.txt

「wget -O -」コマンドでISOイメージをファイルではなく標準出力へダウンロードし、teeコマンドでファイルとして保存しつつ、ハッシュ値を算出するには

wget -O - http://example.com/dvd.iso | tee dvd.iso | sha1sum

まとめ

未確認情報ですが、teeコマンドを使って大容量のデータをファイルに出力すると、リダイレクトに比べて遅いらしいので、大容量のファイルを処理する場合は注意が必要かもしれません。