teeコマンドで標準出力をファイルに保存しながら表示する方法

先生

Linuxのteeコマンド、使ってる?標準出力をファイルに保存しつつ画面にも表示できる便利ワザを解説!

teeコマンドとは?標準出力をファイルに保存しつつ表示

LinuxやmacOSなどのUNIX系OSで利用できるteeコマンドは、標準入力を標準出力とファイルの両方に書き出す便利なツールです。コマンドの実行結果を画面に表示しながら、同時にファイルに保存したい場合に非常に役立ちます。

例えば、ログファイルの作成や、デバッグ時の出力結果の記録などに活用できます。パイプライン処理の一部として使用することも多く、シェルスクリプトの作成に欠かせないコマンドの一つと言えるでしょう。

このコマンドを使いこなすことで、開発効率を向上させ、システムの運用管理をよりスムーズに行うことができるようになります。

具体例を挙げると、サーバーの起動ログを画面で確認しつつ、後で分析するためにファイルに保存したり、データベースのバックアップ処理の結果を記録したりする際に有効です。

teeコマンドの基本的な使い方

teeコマンドの基本的な構文は以下の通りです。

command | tee [オプション] ファイル名

commandは実行したいコマンド、ファイル名は出力結果を保存するファイルの名前です。オプションを指定することで、teeコマンドの動作を細かく制御できます。

最も基本的な使い方は、コマンドの出力を画面に表示しつつ、指定したファイルに上書き保存することです。

ls -l | tee output.txt

上記の例では、ls -lコマンドの実行結果が画面に表示されると同時に、output.txtというファイルに保存されます。もしoutput.txtが存在しない場合は新規作成され、存在する場合は上書きされます。

ファイルを上書きではなく追記したい場合は、-aオプションを使用します。

ls -l | tee -a output.txt

この場合、ls -lコマンドの実行結果がoutput.txtの末尾に追加されます。ログファイルを継続的に記録する際に便利です。

また、-iオプションを使用すると、割り込みシグナルを無視することができます。これにより、コマンドが中断されても、ファイルへの書き込み処理を継続させることができます。

command | tee -i output.txt

teeコマンドのオプション

teeコマンドには、いくつかの便利なオプションがあります。主なオプションは以下の通りです。

-a, --append: ファイルに追記する

-i, --ignore-interrupts: 割り込みシグナルを無視する

--output-error[=MODE]: 標準エラー出力をコピーする方法を設定する。 MODEには’output'(デフォルト),’error’,’none’または’all’を指定可能

-p: パイプが壊れた場合でも、書き込みを継続する (POSIX拡張)

--help: ヘルプを表示する

--version: バージョン情報を表示する

-aオプションは、ファイルに追記する際に使用します。既存の内容を上書きしたくない場合に便利です。

-iオプションは、コマンド実行中にCtrl+Cなどで中断された場合に、teeコマンドも中断されるのを防ぎます。バックグラウンドで実行するコマンドの出力を記録する際に役立ちます。

--output-errorは、標準エラー出力をどのように扱うかを制御します。エラー出力もファイルに保存したい場合に利用します。

-pオプションは、パイプラインが途中で中断された場合でも、書き込み処理を継続させます。ネットワーク経由でデータを転送する際に、接続が切断された場合でもデータの損失を防ぐことができます。

teeコマンドを使った応用例

teeコマンドは、単独で使用するだけでなく、他のコマンドと組み合わせて使用することで、さらに強力なツールとなります。

例えば、grepコマンドと組み合わせることで、特定のパターンに一致する行を画面に表示しつつ、ファイルに保存することができます。

cat access.log | grep '404' | tee error.log

上記の例では、access.logファイルから404エラーを含む行を抽出し、画面に表示すると同時にerror.logファイルに保存します。

sudoコマンドと組み合わせることで、root権限で実行したコマンドの出力を記録することができます。

sudo apt update | tee apt_update.log

この例では、apt updateコマンドをroot権限で実行し、その出力をapt_update.logファイルに保存します。

また、複数のteeコマンドを組み合わせることで、複数のファイルに同時に出力することも可能です。

command | tee file1.txt | tee file2.txt

上記の例では、commandの出力をfile1.txtfile2.txtの両方に保存します。

teeコマンド利用時の注意点

teeコマンドを使用する際には、いくつかの注意点があります。

まず、ファイルへの書き込み権限があることを確認してください。書き込み権限がない場合、teeコマンドはエラーを出力し、ファイルへの保存に失敗します。

また、保存先のファイルが存在する場合、デフォルトでは上書きされます。既存の内容を誤って消去しないように、-aオプションを使用して追記モードで実行することを検討してください。

大量のデータを処理する場合、ディスク容量に注意が必要です。teeコマンドは、標準出力と同じ量のデータをファイルに保存するため、ディスク容量を圧迫する可能性があります。

ログファイルをローテーションするなど、定期的にファイルを整理することを推奨します。

セキュリティ上の観点から、機密情報を含むコマンドの出力を保存する際には、ファイルのアクセス権を適切に設定してください。chmodコマンドを使用して、ファイルへのアクセスを制限することができます。

参考リンク

まとめ

teeコマンドは、標準出力を画面に表示しながらファイルに保存できる非常に便利なコマンドです。ログの記録、デバッグ、システム管理など、様々な場面で活用できます。

オプションを使いこなすことで、より柔軟な使い方が可能になります。今回の記事を参考に、teeコマンドをマスターし、日々の開発や運用業務に役立ててください。