Linuxコマンドtee使い方と2つのオプション

Linuxコマンドteeは、出力結果を画面に表示しながら同時にファイルにも保存できる便利なツールです。この記事では、teeコマンドの使い方、オプション、そして活用方法について説明します。

Linuxコマンドteeとは?

teeコマンドは基本的にパイプ(|)と一緒に使用され、標準出力(ターミナルに表示される結果)をファイルにも保存します。通常、コマンドの出力は一つの場所にのみ送られますが、teeを使えば出力結果を複数の場所に分けることができます。

標準出力と標準入力の理解

Linuxコマンドをよく理解するためには、まず標準出力(stdout)と標準入力(stdin)について知る必要があります。標準出力はプログラムが結果を出力する基本的なチャネルで、主にターミナルに表示されます。標準入力はプログラムがユーザーからデータを入力されるチャネルです。

teeコマンドはこの標準出力を途中でキャッチし、ターミナルとファイルの両方に結果を出力します。ログを記録したり、結果を保存しながら同時にリアルタイムで確認したい場合に非常に便利です。

Linuxコマンドteeを使うべき場合

以下の図をご覧ください。ls -laコマンドの結果をリダイレクション演算子(>)を使ってoutput_ls.txtというファイルに保存すると、何も画面には表示されません。catコマンドを使用してファイルの内容を確認しないと、結果がどうなったか分かりません。ファイルに保存しつつ、同時に出力結果も確認したい場合、まさにLinuxコマンドteeが必要となります。

図1. Linuxコマンドteeを使わずにリダイレクション(>)演算子を使用した場合
図1. Linuxコマンドteeを使わずにリダイレクション(>)演算子を使用した場合

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

teeコマンドの基本的な使用方法は次の通りです。

<コマンド> | tee <ファイル名>
ShellScript

このコマンドは、<コマンド>の結果をターミナルに出力しながら、同時に<ファイル名>に保存します。例えば、lsコマンドの結果をoutput.txtファイルに保存したい場合、以下のように入力します。

ls | tee output.txt
ShellScript

このコマンドを実行すると、lsの結果が画面に表示されながら同時にoutput.txtファイルに保存されます。このとき注意すべき点は、既存のファイルがある場合、そのファイルを上書きしてしまうことです。以下のようにoutput.txtファイルに結果が保存されていることが確認できます。

図2. Linuxコマンドteeを使って画面に表示し、ファイルに保存した場合
図2. Linuxコマンドteeを使って画面に表示し、ファイルに保存した場合

コマンドで複数のファイルに保存

teeコマンドを使うと、一度に複数のファイルに保存することができます。ファイル名はカンマで区切らず、それぞれ指定します。

<コマンド> | tee <ファイル1> <ファイル2> <ファイル3>
ShellScript

例えば、uname -aコマンドの結果をoutput1.txtoutput2.txtに同時に保存するには、以下のように使用できます。

uname -a | tee output1.txt output2.txt
ShellScript

実行結果は以下の通りです。output1.txtoutput2.txtファイルに同じ結果が保存されていることが確認できます。

図3. Linuxコマンドteeで複数ファイルに同時に結果を保存
図3. Linuxコマンドteeで複数ファイルに同時に結果を保存

主なオプション

teeコマンドは、さまざまなオプションを提供しており、より便利に使用できます。以下に、よく使われるいくつかのオプションを紹介します。

-a (append): 既存ファイルに内容を追加

通常、teeコマンドは指定したファイルの内容を上書きしますが、-aオプションを使うと、既存ファイルの内容の後ろに新しい出力を追加できます。

<コマンド> | tee -a <ファイル名>
ShellScript

例えば、dfコマンドの結果をoutput.txtファイルに追加したい場合、以下のように入力します。

df | tee -a output.txt
ShellScript

これにより、既存のoutput.txtファイルが上書きされず、新しい出力がファイルの最後に追加されます。先ほど使用したls -laコマンドの実行結果の後に、dfの実行結果が追加されていることが確認できます。

図4. Linuxコマンドtee -aオプションを使って結果をファイルの後ろに追加
図4. Linuxコマンドtee -aオプションを使って結果をファイルの後ろに追加

-i (ignore-interrupts): 中断信号を無視

teeコマンドを実行中にCtrl + Cのような割り込み信号を無視することができます。そのためには、-iオプションを使用します。

<コマンド> | tee -i <ファイル名>
ShellScript

例えば、長時間実行が必要なコマンドを使用する際、意図しないキーボード信号による中断を防ぎたい場合、このオプションを使用することができます。

teeコマンド活用のヒント

teeコマンドは、さまざまな場面で非常に便利に活用できます。いくつかの実用的な活用例を紹介します。

コマンド実行結果をリアルタイムで保存

teeコマンドを使うと、コマンドの実行結果をリアルタイムで確認しながら保存できるため、ログファイルを管理するのに便利です。例えば、システムログをリアルタイムでモニタリングしながら保存するには、次のように使用します。

tail -f /var/log/syslog | tee syslog_backup.txt
ShellScript

このコマンドは、/var/log/syslogログファイルの最新の変更内容をリアルタイムでモニタリングしながら、syslog_backup.txtに保存します。サーバ管理やシステムモニタリング作業を行う際に非常に有用です。

図5. Linuxコマンドteeでsyslogの最新変更内容を確認しながらファイルに保存
図5. Linuxコマンドteeでsyslogの最新変更内容を確認しながらファイルに保存

sudoコマンドと一緒に使用

sudoと一緒に使用することで、出力結果をルート権限でファイルに保存できます。例えば、システム設定を確認し、その結果をファイルに保存したいとき、sudoと一緒にteeを使うと便利です。

ifconfig | sudo tee network_info.txt
ShellScript

このコマンドは、ネットワーク設定情報を確認し、その結果をnetwork_info.txtに保存します。もし次のようにsudoを最初に付けて実行すると、sudoifconfigにのみ適用され、teeには適用されないので、注意して使用する必要があります。

sudo ifconfig | tee network_info.txt
ShellScript

使用時の注意点

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

  • ファイルの上書き:基本的にteeコマンドは指定したファイルを上書きします。既存ファイルを上書きせずに内容を追加したい場合は、-aオプションを使う必要があります。
  • ファイルの権限:出力結果を保存するファイルへの書き込み権限がない場合、エラーが発生することがあります。その場合はsudoコマンドと一緒に使用して権限の問題を解決できます。
  • パフォーマンスの問題:非常に多くのデータを出力する場合、teeコマンドを使用するとパフォーマンスに影響を与える可能性があります。特に大容量のログファイルを保存する際には注意が必要です。
  • sudo使用sudoを一緒に使用する場合、teeの前に記述することで、teeで保存するファイルのパーミッション問題を解決できます。コマンドラインの最初にsudoを記述すると、そのコマンドにのみsudoが適用されます。

まとめ

Linuxコマンドteeは、標準出力をターミナルに表示しながら同時にファイルに保存できる便利なツールです。基本的な使い方は簡単ですが、-aオプションを使ってファイルに内容を追加したり、複数のファイルに同時に保存したりするなど、さまざまな場面で効果的に使用できます。また、リアルタイムログのモニタリングや権限管理にも役立つので、Linuxを使用する際には積極的に活用してみてください。

リファレンス

関連ポスト

コメントする