tee コマンド入門 - 出力を分岐させる
tee って何?
|)でコマンドをつなぐのは覚えたんですけど、途中の結果も手元に残したいなあって思うんです。tee の出番だよ!「T字型の水道管」みたいに、出力を分岐させるコマンドなんだ。パイプでコマンドをつなぐとき、出力は次のコマンドへ流れていくだけです。でも tee を使うと、流しながらファイルにも保存できます。
通常のパイプ:
コマンドA → コマンドB(途中は見えない)
tee を使うと:
コマンドA → tee ─→ ファイルに保存
↓
コマンドBへも流れるtee の名前の由来
英字の大文字「T」の形に似ているから。入力が 1 本で、出力が 2 方向に分岐します。
基本的な使い方
tee ファイル名 を挟むだけ!command | tee ファイル名
例:ls -la の結果を画面に表示しながら list.txt に保存
ls -la | tee list.txt
実行すると、画面に結果が表示されつつ、list.txt にも同じ内容が書き込まれます。
ポイント
- 画面への表示:止まらずそのまま出る
- ファイルへの保存:同時に書き込まれる
> リダイレクトとの違い
ls -la > list.txt とどう違うんですか?> は画面には表示されないけど、tee は画面にも出るんだよ。| 方法 | 画面への表示 | ファイルへの保存 |
|---|---|---|
command |
あり | なし |
command > file |
なし | あり |
command | tee file |
あり | あり |
どちらを使うかは目的次第。「確認しながら保存したい」なら tee、「とにかくファイルに保存するだけ」なら > で十分です。
実行ログを残しながら確認する
make install 2>&1 | tee install.log
2>&1 は「エラー出力も一緒に流す」という指定です。これでエラーメッセージも含めてログに残せます。
2>&1 とは
1= 標準出力(通常の出力)2= 標準エラー出力(エラーメッセージ)2>&1= エラーも標準出力にまとめる
これを書かないと、エラーメッセージはファイルに入らず画面にしか出ません。
-a オプション:追記する
tee でファイルに保存するとき、毎回上書きされちゃうんですよね?-a オプションをつけよう。command | tee -a ファイル名
例:毎回の実行結果を同じログファイルに追加していく
date | tee -a run.log date | tee -a run.log cat run.log
Mon Jun 1 03:00:00 UTC 2026 Mon Jun 1 03:00:05 UTC 2026
-a なしで tee を使うと、毎回ファイルが上書きされます。ログを蓄積したいときは必ず -a をつけましょう。
複数ファイルに同時保存
command | tee ファイル1 ファイル2
例:/tmp/result.txt と ~/backup.txt の両方に保存
ls -la | tee /tmp/result.txt ~/backup.txt
ファイルはいくつでも並べられます。全部に同じ内容が書き込まれます。
sudo tee で root ファイルに書き込む
sudo tee の出番!sudo と組み合わせると、root 権限が必要なファイルにも書き込めるんだ。root 権限が必要なファイルを書き換えたいとき、sudo echo > file はうまくいきません。
# これは失敗する(リダイレクトはシェルの処理なので sudo の効果が届かない) sudo echo "127.0.0.1 example.local" >> /etc/hosts
sudo echo > file が失敗する理由:sudo がかかるのは echo コマンドだけです。>> によるリダイレクトはシェル自身が処理するため、一般ユーザー権限のままになります。
sudo tee を使うと正しく書き込めます。
echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts
これは echo でテキストを生成し、それを sudo tee に流すことで、root 権限で /etc/hosts に追記しています。
画面に内容が出力されて邪魔な場合は、末尾に > /dev/null をつけると抑制できます。
echo "127.0.0.1 example.local" | sudo tee -a /etc/hosts > /dev/null
sudo tee は強力なコマンドです。/etc/ 配下の重要なファイルを書き換えるときは、必ず事前にバックアップを取りましょう。
sudo cp /etc/hosts /etc/hosts.bak
パイプの途中で結果を確認する
tee をデバッグに使うといいよ!途中経過をファイルに保存しながら次のコマンドに流せる。cat access.log | grep "ERROR" | tee /tmp/errors.txt | sort | uniq -c
上のコマンドでは:
grep "ERROR"で絞り込んだ結果をteeで/tmp/errors.txtに保存- その後
sort | uniq -cで集計
途中結果を cat /tmp/errors.txt で確認できるのでデバッグに役立ちます。
パイプが複数段ある場合は、各ステップで tee を使って途中結果を保存しながら進めると原因特定がしやすくなります。
まとめ
sudo tee は実務でよく出てくるパターンだから覚えておくと便利だよ。ログを残しながら作業するのも大事な習慣だしね。| 用途 | コマンド例 |
|---|---|
| 画面表示しながら保存 | command | tee file.txt |
| 追記保存(上書きしない) | command | tee -a file.txt |
| 複数ファイルに保存 | command | tee file1 file2 |
| root ファイルに書き込む | echo "..." | sudo tee -a /etc/hosts |
| パイプ途中の出力を確認 | cmd1 | tee /tmp/debug.txt | cmd2 |